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中,您不能在初始化中这样做。对不起(