1.情景重现
遇到这样一个报错“error C2440: “初始化”: 无法从“initializer list”转换”。
出问题的功能是用列表初始化一个结构体数组。因这样写起来很简练,充满诱惑,故还是想保留这个写法:
struct Test
{
LPCWSTR testName = L"";
int testValue = 0;
};
Test tests[] = {
{ L"Test1", 100 },
{ L"Test2", 100 }
};
结构体实现了一个初始化变量的代码,看起来似乎完美,省去了构造函数的一堆代码,又确保了安全性。数组也省掉了对每个结构体单独赋初值的操作。但是就是无法编译通过。
2.建议方法
网上提供的解决办法是添加一个初始化列表:
看起来似乎可行。但是这个结构体并不是一个单独类型的列表。
3.最终方案
最终方案并不是添加构造函数,而是去掉初始化代码,问题解决。
struct Test
{
LPCWSTR testName/* = L""*/;
int testValue/* = 0*/;
};
Test tests[] = {
{ L"Test1", 100 },
{ L"Test2", 100 }
};