3

次のような構造を含むヘッダー ファイルがあります。

typedef struct
{
    int index = -1;
    stack_node *head;
} stack;

しかし、cc でコンパイルすると、代入行 ( int index = -1)でエラーが表示されます。

error: expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘=’ token

変数を初期化するための初期化関数を追加する必要がありますか?

4

4 に答える 4

5

あなたが提供するのは変数宣言ではなく、型定義です。typedef の構造体フィールドにデフォルト値を割り当てることはできません。

構造体変数に初期値を割り当てたい場合は、次のことを試してください。

stack myStack = { .index = 1 };

これは C99 で動作します。

于 2011-04-11T08:26:07.370 に答える
4
typedef struct
{
    int index;
    stack_node *head;
} stack;

stack getStack()
{
    stack st;
    st.index = -1;
    return st;
}
于 2011-04-11T08:24:06.727 に答える
1

Cでは、構造体内で変数を割り当てることはできません。

ただし、各インスタンスの作成時に別の関数で初期化する必要があります。

于 2011-04-11T08:23:51.723 に答える
1

そのような構造体宣言で値を割り当てることはできません。

stack s = { -1, 0 };

これを試して。

技術的には、C++ を使用している場合は、構造体のコンストラクターを定義できます。これは C では機能しないと思います。厳密に C 環境にいる場合は、上記を使用してください。

typedef struct _stack
{
    int index = -1;
    stack_node *head;
    _stack() {
        index = -1;
        head = 0;
    }
} stack;

このようなもの。それが機能しない場合はお知らせください。私はいくつかのメモリに基づいて書いており、かなり長い間 C をあまり書いていません。

更新:@mouvicielの回答が好きです。プレフィックスを付けて個々のメンバー変数を初期化できるとは知りませんでした。前に。何かを学んだ。ありがとう。

于 2011-04-11T08:32:52.090 に答える