使用构造函数初始化列表初始化结构时出现问题

Trouble on initializing a struct with the constructor initialization list

本文关键字:初始化 问题 列表 构造函数 结构      更新时间:2023-10-16

我正在编写Arduino,在使用以下代码时遇到问题

struct myStruct {
  char variable1[10];
  char variable2[10];
  char variable3[10];
  // Constructor
  myStruct() : variable1({''}), variable2({''}), variable3({''}) {}
};

因为我收到以下错误:

expected primary-expression before '{' token

问题出在哪里?我该如何解决?

注意用于处理以空结尾的字符串。


顺便说一句:为什么下面的代码有效而上面的代码不起作用?

struct myStruct {
  char variable1[10];
  char variable2[10];
  char variable3[10];
} variable = {{''}, {''}, {''}};;

删除参数。仅使用牙套。

也就是说,而不是

variable1({''})

写这个,

variable1{''}   //removed parens!

如果您遵循该操作,您的代码将如下所示:

myStruct() : variable1{''}, variable2{''}, variable3{''} {}

任何支持 C++11 的编译器都应该能够编译它。


在 C++03 中,写下以下内容:

myStruct() : variable1(), variable2(), variable3() {}

这应该适用于这种特殊情况。这就是你所拥有的:值初始化。C++03没有给你太多的自由。

在 C++11 中,您的代码应该可以工作,尽管它的括号比绝对必要的要多。

在任何C++中,您都可以指定值初始化以零初始化数组:

myStruct() : variable1(), variable2(), variable3() {}

如果你是极端偏执狂,并且不相信''等同于零,那么你必须写入构造函数主体中的数组。

为什么下面的代码有效而上面的代码不起作用?

因为始终可以在声明中聚合-初始化变量。直到 2011 年,才有可能在成员初始化器中执行此操作。

假设您只想将成员变量初始化为空(C 样式)字符串,请更改:

  // Constructor
  myStruct() : variable1({''}), variable2({''}), variable3({''}) {}

自:

  // Constructor
  myStruct() : variable1(""), variable2(""), variable3("") {}

编辑

显然,某些版本的 gcc 抱怨这种用法(请参阅下面的评论) - 这似乎是由于 gcc 中的错误。