2

私はこれをやろうとしていますが、私のコンパイラは私を許しません:

    struct {
        const char* string = "some text";
    } myAnonymousStruct;

構造体宣言で代入を行うことができないためだと思います-それらは関数またはその他で行われるはずです。const char*しかし、変数を割り当てることさえ本当に許可されていないのでしょうか?
誰かが私に欠けているものを教えてくれれば、本当に感謝しています。どうも

4

1 に答える 1

6

あなたのコードは、C++11 以降をサポートするコンパイラでまったく問題ありません。

C++11 より前は、構造体のメンバーをデフォルトで初期化できませんでした。代わりに、インスタンス構造体が作成された後に初期化する必要があります。

ニーズに合う場合は、次のように集計の初期化を使用できます。

struct {
    const char* string;
} myAnonymousStruct = { "some text" };

ただし、構造体の複数のインスタンスをデフォルトで初期化しようとしている場合は、構造体にコンストラクターを指定して、代わりにメンバーを初期化することをお勧めします。

struct MyStruct {
    const char* str;
    MyStruct() : str("some text") { }
};

MyStruct foo;
MyStruct bar;

前の例では、foobarは の異なるインスタンスでありMyStruct、どちらも にstr初期化されてい"some text"ます。

于 2012-12-22T05:14:03.517 に答える