VS2022中C++结构体初始化报E0029和C2059语法错误求助
问题分析与解决
你的代码有三个核心问题导致E0029和C2059错误:
- 多余的空语句
myCar;,这行没有实际作用,还会干扰语法解析。 - 混用了C和C的初始化语法:C的指定初始化统一使用
=赋值符号,不能用C语言的:。 - 错误对已声明的结构体变量使用初始化块语法:
{ .成员 = 值 }的指定初始化语法,在C++中仅支持变量声明时直接初始化,不能用于已声明变量的赋值。
另外需要注意:代码中使用了std::string,必须包含<string>头文件,标准环境下不保证<iostream>会间接包含它,漏写可能导致编译失败。
修正方案1:声明时直接指定初始化(C++20及以上支持)
#include <iostream> #include <string> // 必须包含的头文件 struct Car { std::string make; std::string model; int year; double cost; }; int main() { // 声明变量时直接用指定初始化语法 Car myCar{ .make = "Tesla", .model = "Model Y", .year = 2020, .cost = 60000 }; return 0; }
修正方案2:先声明再逐个成员赋值(兼容所有C++版本)
#include <iostream> #include <string> struct Car { std::string make; std::string model; int year; double cost; }; int main() { Car myCar; // 逐个给结构体成员赋值 myCar.make = "Tesla"; myCar.model = "Model Y"; myCar.year = 2020; myCar.cost = 60000; return 0; }
内容的提问来源于stack exchange,提问作者beeboo
相关产品推荐
相关产品推荐

