我正在编程Arduino,使用以下代码时遇到问题
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
用于处理空终止字符串。
BTW :为什么以下代码有效,而上述代码没有?
struct myStruct {
char variable1[10];
char variable2[10];
char variable3[10];
} variable = {{'\0'}, {'\0'}, {'\0'}};;
答案 0 :(得分:2)
删除parens。仅使用大括号。
即代替
variable1({'\0'})
写这个,
variable1{'\0'} //removed parens!
如果你这样做,你的代码将如下所示:
myStruct() : variable1{'\0'}, variable2{'\0'}, variable3{'\0'} {}
任何支持C ++ 11的编译器都应该能够编译它。
在C ++ 03中,写下:
myStruct() : variable1(), variable2(), variable3() {}
这应该适用于这种特殊情况。这就是你所拥有的:价值初始化。 C ++ 03并没有给你很多自由。
答案 1 :(得分:0)
假设您只想将成员变量初始化为空(C风格)字符串,请更改:
// Constructor
myStruct() : variable1({'\0'}), variable2({'\0'}), variable3({'\0'}) {}
为:
// Constructor
myStruct() : variable1(""), variable2(""), variable3("") {}
显然某些版本的gcc会抱怨这种用法(请参阅下面的评论) - 这似乎是由于bug in gcc。
答案 2 :(得分:0)
在C ++ 11中,您的代码应该可以工作,尽管它有更多的括号而不是严格必要的。
在任何C ++中,您都可以指定值初始化以对数组进行零初始化:
myStruct() : variable1(), variable2(), variable3() {}
如果你是超偏执的,并且不相信'\0'
等于零,那么你必须写入构造函数体中的数组。
为什么以下代码有效,而上述代码没有?
因为始终可以在声明中聚合初始化变量。自2011年以来,只有成员初始化者才能做到这一点。