7
struct Structure {
//  Structure(const char* n, int v, bool a) : name(n), value(v), awesome(a) {}
  const char* name;
  int value;
  bool awesome;
};
std::map<const char*, Structure> map;
map["alpha"] = {"Alpha", 0, true};
map["beta"]  = {"Beta",  1, false};
map["gamma"] = {"Gamma", 2, true};

G++ (4.6) は、C++03 で代入のこの構文を受け入れますが、「拡張初期化子構文は C++0x でのみ使用可能です」(言い換え) と不平を言います。値を順番に受け入れるコンストラクターを作成できることは知っていますが、この構文が受け入れられるかどうか (C++0x を使用しない場合)、または C+ がとても気になるので G++ が私をなだめているだけかどうかを知りたかったのです。 +0x。

clang++ でコンパイルしても (C++0x では、イニシャライザ リストが不足していると想定しています)、「期待される式」と言って、基本的に「それは一体何なの?」という意味です。コンストラクター (上記でコメントアウト) を使用すると、エラーがスローされます。

要約:基本的に、使用する正しい構文は何ですか? また、初期化リスト形式 (C++03 または C++0x) を使用できますか?

4

1 に答える 1

5

上記のコードは、新しい統一された初期化構文を使用することにより、C++0x でのみ有効です。C++03 はこれを拒否します。当面は、コンストラクターを定義することをおstruct勧めします。

于 2011-08-10T08:03:27.733 に答える