VS2017 Community(Windows7平台)初始化结构体时触发C2100错误求助
解决VS2017 Community下C2100非法间接寻址错误的问题
嗨,这个问题我之前帮朋友排查过,咱们来聊聊原因和解决办法:
错误根源
你用的Conf cf({ 0, 0, 0, 0, 0, 0, 0 });这种直接用花括号列表初始化结构体对象的语法,是C++11及以后版本才支持的聚合初始化特性。而VS2017 Community默认的C标准可能还是旧的C98(或者没有显式启用C++11),编译器不识别这种语法,就会抛出C2100非法间接寻址的错误。
具体解决办法
这里有几种可行的方案,你可以根据自己的情况选择:
方案一:启用C++11及以上标准
右键你的项目 → 选择「属性」→ 依次展开「配置属性」→「C/C++」→「语言」→ 在「C标准」下拉菜单里选择「ISO C11 标准(/std:c11)」(或者更高的C14,VS2017也支持)。应用设置后重新编译,问题应该就能解决。方案二:使用C++98兼容的初始化写法
如果不想修改项目的标准设置,可以把初始化代码改成旧版C++支持的形式:Conf cf = { 0, 0, 0, 0, 0, 0, 0 };这种写法在C++98里是合法的聚合初始化方式,编译器能正常识别。
方案三:添加自定义构造函数(可选)
你也可以给结构体添加一个带参数的构造函数,这样就能用括号直接初始化:struct Conf { unsigned int id; int test1; int test2; int test3; int test4; int test5; int test6; // 自定义构造函数 Conf(unsigned int i, int t1, int t2, int t3, int t4, int t5, int t6) : id(i), test1(t1), test2(t2), test3(t3), test4(t4), test5(t5), test6(t6) {} }; // 调用构造函数初始化 Conf cf(0, 0, 0, 0, 0, 0, 0);不过这种方式需要手动写构造函数,相比前两种方案稍显繁琐,适合需要更复杂初始化逻辑的场景。
内容的提问来源于stack exchange,提问作者Payalord
相关产品推荐
相关产品推荐

