我怎么能/应该初始化并正确使用`struct`?

时间:2013-10-01 09:48:18

标签: c++ data-structures refactoring initialization arduino

我正在编程Arduino,我正在尝试重构

中的代码
char variable1[10] = {'\0' };
char variable2[10] = {'\0' };
char variable3[10] = {'\0' };

struct set {
  char variable1[10];
  char variable2[10];
  char variable3[10];
} mySet;

但是,当我尝试通过运行以下代码初始化上述struct的成员时

mySet.variable1 = {'\0' };
// or
mySet.variable1 = '\0';

然后我收到以下错误:

expected constructor, destructor, or type conversion before '.' token

我应该/应该如何初始化并正确使用struct

2 个答案:

答案 0 :(得分:2)

一种方法如下:

struct set {
  char variable1[10];
  char variable2[10];
  char variable3[10];
} mySet = {{'\0'}, {'\0'}, {'\0'}};

当然,在C ++中,您可以使用0代替'\0',因此您可以用更易读的方式编写它:

struct set {
  char variable1[10];
  char variable2[10];
  char variable3[10];
} mySet = {{0}, {0}, {0}};

最后,因为这是C ++,所以没有理由不给你的struct一个构造函数,所以如果你打算初始化很多这样的结构,你可以使用默认的构造函数:

set()
: variable1({0})
, variable2({0})
, variable3({0}) {
}

答案 1 :(得分:1)

最简单的只是:

set mySet = {};

。或者,您可能希望为其定义构造函数 set,确保您无法初始化它:

struct set
{
    //  ...
    set() { /* ... */ }
};

但请注意,如果您这样做,则无法再使用 聚合初始化;即。

set mySet = { "abc", "xyz", "123" };

将不再合法。

(当然,您不想使用名称set,因为 有人会稍后再来using namespace std;,然后。{ 期望获得std::set。避免使用标准中的名称 如果可以的话库。)