2013-10-01 91 views
2

我编程Arduino和我试图重构代码我该如何/应该初始化和正确使用`struct`?

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

一种方式做到这一点如下:

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

什么是其他方法(例如,为了通过使用类似'mySet.variable1 = <...>'的代码来初始化'struct')?为什么我应该使用'struct set {...} mySet = {{0},{0},{0}}来初始化'struct';'而不是'mySet.variable1 = <...>'? – Backo

+0

为什么没有理由不给你的结构构造函数?我可以在哪里阅读更多关于? – Backo

+0

@Backo当你编写'mySet.variable1 = ...'时,它不再是初始化,而是一项任务。你将'struct'初始化为整体,而不是一次一个地将其初始化。 – dasblinkenlight

1

最简单的将是简单的:

set mySet = {}; 

。或者,您可能希望定义一个构造 set,这能确保你不能没有初始化:

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

但是请注意,如果你这样做,你可以不再使用 集合初始化;即

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

将不再合法。

(当然,你不希望,如果你能在标准 库使用的名称set,因为 有人会沿后过来做using namespace std;,并 期望得到std::set避免名称。 )