2013-10-01 123 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避免名稱。 )