0

Arduinoをプログラミングしていますが、次のコードを使用すると問題が発生します

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はヌル終了文字列の処理に使用されます。


ところで:次のコードが機能し、上記のコードが機能しないのはなぜですか?

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

3 に答える 3

2

括弧を削除します。ブレースのみを使用してください。

つまり、代わりに

variable1({'\0'})

これを書いて、

variable1{'\0'}   //removed parens!

それに従うと、コードは次のようになります。

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

C++11 をサポートするすべてのコンパイラでコンパイルできるはずです。


C++03 では、次のように記述します。

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

これは、この特定のケースで機能するはずです。それはあなたが持っているすべてです:値の初期化。C++03 ではあまり自由がありません。

于 2013-10-01T10:58:01.263 に答える
0

メンバー変数を空の (C スタイルの) 文字列に初期化したいだけだとすると、次のように変更します。

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

に:

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

編集

gcc の一部のバージョンは、この使用法について不平を言っているようです (以下のコメントを参照) - これは gcc のバグによるものと思われます。

于 2013-10-01T10:55:22.363 に答える
0

C++11 では、厳密に必要な数よりもかなり多くの括弧が含まれていますが、コードは機能するはずです。

どの C++ でも、値の初期化を指定して、配列をゼロで初期化できます。

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

あなたが超妄想的で、'\0'ゼロと同等であるとは信じていない場合は、コンストラクター本体の配列に書き込む必要があります。

次のコードが機能し、上記のコードが機能しないのはなぜですか?

宣言で変数を集約初期化することは常に可能だったからです。メンバー初期化子でそれが可能になったのは2011年以来です。

于 2013-10-01T11:01:16.580 に答える