使用C++11列表初始化类成员时g++编译器报错求助
解决C++类成员列表初始化被判定为函数定义的编译错误
错误原因
你使用的C11引入的类成员列表初始化语法(如int age{};),在编译器默认的旧标准(比如C98)下不被支持。此时编译器会把int age{};错误解析为无参函数声明(等价于int age();),因此抛出function definition does not declare parameters的编译错误。
解决方案
你的编译器(Apple clang 14.0.3)完全支持C11及更高版本,只需在编译时显式指定C标准版本即可:
- 使用以下命令编译代码:
g++ main.cpp -o main -std=c++11 - 也可以指定更高的标准版本,比如
-std=c++17或-std=c++20,根据你的需求选择即可。
添加该编译选项后,编译器会正确识别类成员的列表初始化语法,不再将其误判为函数定义,代码即可正常编译运行。
内容的提问来源于stack exchange,提问作者Shaowen Zhu
相关产品推荐
相关产品推荐

