2013-05-08 2 views
0

Может ли кто-нибудь помочь мне определить, что я делаю неправильно здесь?Массив внутри структуры и инициализации

Я имею следующую структуру:

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

Я получаю сообщение об ошибке:

Expected expression before {

На двух линиях ниже, где я пытался инициализировать массивы, определенные в структуры:

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 
    } 

} 

Обычно я могу инициализировать пустой массив. Но когда он определен в структуре, мне трудно это делать.

ответ

0

Что вы здесь делаете, это не инициализация, это назначение, но вам не нужно его инициализировать. Глобальные переменные в C автоматически инициализируются нулем. Просто заполните поля number, если это все, что вам нужно. Если вы сделать должны сделать что-то к marked и crossed полей используйте bzero или memset:

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; 
+0

Я до сих пор не могу его инициализировать. Я отредактирую сообщение, чтобы показать весь код, возможно, это поможет понять, что я пытаюсь сделать. – chaser

+0

@chrolli - отредактирован, чтобы соответствовать вашему новому вопросу. –

+0

Что делать, если я хочу инициализировать отмеченные [] и скрещенные [] на другие значения, отличные от 0? Могу ли я это сделать в определении структуры или во время инициализации ячейки? – chaser

0

сетка [0] [0] относится к экземпляру ячейки, а не к массивам в ячейке. Вам разрешено инициализировать массивы при объявлении, поэтому лучше всего сделать это:

ячейка сетки [10] [10] = {0};

В C++ структуры могут иметь конструкторы - единственная разница между структурами и классами является видимостью по умолчанию (private для классов, public для structs).

+0

Это не работает, я получаю сообщение об ошибке «Отсутствие скобок вокруг инициализатора» – chaser

+0

Эта инициализация действительна C. Ваша ошибка в том, что у вас есть дополнительные предупреждения, которые заслуживают похвалы. Я не думаю, что вы захотите пойти по пути полной инициализации этой структуры данных, если вы можете ее избежать. Это будет много кода. –