0

ここで私が間違っていることを誰かが特定するのを手伝ってくれますか?

私は次の構造体を持っています:

typedef struct cell {
    int number;
    int marked[10];
    int crossed[10];
    struct cell *next_sibling;
}cell;

エラーが発生します:

{ の前に期待される式

以下の 2 行で、構造体内で定義された配列を初期化しようとしました。

cell grid[10][10];

int main (){
    int i = 0, j = 0;
    int c;
    while (getchar() != EOF){
        grid[i][j].number = c - '0';
        grid[i][j].marked = {0};
        grid[i][j].crossed = {0};
        ... and so on
    }

}

通常、空の配列を初期化できます。しかし、構造体で定義されている場合、それを行うのは困難です。

4

2 に答える 2

0

grid[0][0] は、セル内の配列ではなく、セルのインスタンスを参照します。宣言時に配列を初期化することしか許可されていないため、できる最善のことは

セル グリッド[10][10] = {0};

C++ では、構造体はコンストラクターを持つことができます。構造体とクラスの唯一の違いは、デフォルトの可視性 (クラスの場合はプライベート、構造体の場合はパブリック) です。

于 2013-05-08T04:32:25.897 に答える
0

ここで行っているのは初期化ではなく代入ですが、初期化する必要はありません。C のグローバル変数は、自動的にゼロで初期化されます。それだけnumberの場合は、フィールドに入力するだけです。andフィールドに何かをする必要がある場合は、 orを使用します。markedcrossedbzeromemset

bzero(grid[i][j].marked, sizeof grid[i][j].marked);
memset(grid[i][j].marked, 0, sizeof grid[i][j],marked);

特定の値を割り当てたい場合は、それも可能です:

grid[i][j].marked[3] = 17;
于 2013-05-08T04:29:52.627 に答える