C++11自定义Vector类编译报错求助:是否为编译器语法支持问题?
问题分析与解决
你的代码语法本身没有问题,报错的核心原因是g默认未启用C11标准支持。你在构造函数初始化列表里用的elem{new double[s]}、sz{s}这种大括号形式的统一初始化语法,是C11才新增的特性,而g默认编译标准是C++98,旧标准不识别这种写法,所以抛出语法错误。
解决方法
方法1:编译时指定C++11及以上标准
在编译命令中添加-std=c++11(或更高版本如c++14/c++17)参数,示例命令:
g++ -std=c++11 vector2.cpp -o vector2
这样编译器就会按照C++11标准解析代码,你的原有代码就能正常编译运行。
方法2:修改代码兼容C++98标准
如果不想依赖C++11,可以把构造函数初始化列表里的大括号改成传统的小括号形式,代码调整如下:
Vector(int s) : elem(new double[s]), sz(s) {}
这种写法兼容C++98标准,无需额外编译参数即可通过编译。
额外小建议
你的main函数里,read_and_sum返回的是double类型,但你用int sum接收,会导致小数部分被截断,建议改成double sum以保留完整计算结果:
int main() { double sum = read_and_sum(5); std::cout << sum; }
内容的提问来源于stack exchange,提问作者goatmilkshake
相关产品推荐
相关产品推荐

