C++ 使用构造函数初始化列表初始化结构时出现问题
我正在编程,使用以下代码时遇到问题C++ 使用构造函数初始化列表初始化结构时出现问题,c++,data-structures,compiler-errors,initialization,arduino,C++,Data Structures,Compiler Errors,Initialization,Arduino,我正在编程,使用以下代码时遇到问题 struct myStruct { char variable1[10]; char variable2[10]; char variable3[10]; // Constructor myStruct() : variable1({'\0'}), variable2({'\0'}), variable3({'\0'}) {} }; 由于我得到以下错误: expected primary-expression before '{' to
struct myStruct {
char variable1[10];
char variable2[10];
char variable3[10];
// Constructor
myStruct() : variable1({'\0'}), variable2({'\0'}), variable3({'\0'}) {}
};
由于我得到以下错误:
expected primary-expression before '{' token
有什么问题?我怎样才能解决它
注意:
\0
用于处理以null结尾的字符串
顺便问一下:为什么下面的代码有效而上面的代码无效
struct myStruct {
char variable1[10];
char variable2[10];
char variable3[10];
} variable = {{'\0'}, {'\0'}, {'\0'}};;
假设您只想将成员变量初始化为空(C样式)字符串,请更改:
// Constructor
myStruct() : variable1({'\0'}), variable2({'\0'}), variable3({'\0'}) {}
致:
编辑
显然,一些版本的gcc抱怨这种用法(见下面的评论)——这似乎是由于删除了paren。只使用大括号 也就是说,而不是
variable1({'\0'})
写这个,
variable1{'\0'} //removed parens!
如果按照此操作,代码将如下所示:
myStruct() : variable1{'\0'}, variable2{'\0'}, variable3{'\0'} {}
任何支持C++11的编译器都应该能够编译它
在C++03中,编写以下代码:
myStruct() : variable1(), variable2(), variable3() {}
这应该适用于这个特殊情况。这就是您所拥有的全部:值初始化。C++03并没有给您太多的自由。在C++11中,您的代码应该可以工作,尽管它的括号比严格要求的要多
在任何C++中,可以指定值初始化为零初始化数组:
myStruct() : variable1(), variable2(), variable3() {}
如果您极度偏执,并且不相信'\0'
等于零,那么您必须写入构造函数体中的数组
为什么下面的代码有效而上面的代码无效
struct myStruct {
char variable1[10];
char variable2[10];
char variable3[10];
} variable = {{'\0'}, {'\0'}, {'\0'}};;
因为总是可以在声明中聚合初始化变量。从2011年开始,在成员初始化器中才可以这样做。你能使用字符串吗?@billz-不,我不能。你想将字符数组全部设置为零还是只设置为空字符串?@Mario-我更新了问题。但是,我在问题中没有报告其他成员。
\0
用于处理以null结尾的字符串。您的代码也可以工作吗?是的,“
相当于{'\0'}
,即它将第一个字节设置为0。@PaulR:您尝试过吗?如果我想使“const char[1]”赋值为“char[10]”时出现“错误:不兼容的类型”,那么我将得到“错误:如何使其显式”(即,我想说明\0
),代码是有效的。看起来有一段时间不太好。@Backo:在这种情况下,你不能像那样初始化你的数组。那么,我怎样才能使它生效呢?无论如何,谢谢。\0
用于处理以null结尾的字符串。您的代码也可以工作?如果我想使其显式(即,我想在我的代码中声明\0
),我如何才能使其显式?@Backo:在C++03中,您不能在初始化中这样做。对不起(