2013-06-21 5 views
0

Я пытаюсь добавить struct к моей программе, используя следующий синтаксис:Ошибка компилятора: «Ожидаемый;» ошибка в C структуры

struct foo { 
    char bar[] = "baz"; 
    char qux[] = "abc"; 
    /* and so on */ 
}; 

По какой-то причине, я получаю сообщение об ошибке на каждом объявлении переменной внутри struct говорят, что я должен добавить точку с запятой , и, кажется, попадает в какую-то петлю с этим. Предполагаемый синтаксис будет примерно

struct foo { 
    char bar[]; =; ;;;;;;/* infinite semicolons */"baz"; 
} 

Это первый раз, когда у меня была такая ошибка; я действительно что-то делаю неправильно, или это просто проблема с самим компилятором?

+0

Вы даже не знаете синтаксис для объявления структуры (а также различия между компилятором и IDE), и вы обвиняете создателей Xcode в написании такой огромной ошибки? Я думаю, что слово дня для вас - это утонченность. ** –

+0

Я не обвиняю программистов за Xcode ничего. Я знаю, что ошибки программного обеспечения происходят, и я новичок в структурах. Я думал, что они могут следовать синтаксису, подобному синтаксису 'union'. – Jules

+2

@ user2129150 они _до_ следуют синтаксису, подобному синтаксису 'union' ... вы не можете делать то, что вы пытались как« союз ». – mah

ответ

4

Это не имеет ничего общего с Xcode. Вообще.

Вы получаете ошибку , потому что вы не можете инициализировать такие структуры.

Определение типа структуры относится только к типам. Присвоение значений членам в данный момент не имеет смысла. Возможно, вы имели в виду

struct foo { 
    char *bar; 
    char *baz; 
}; 

struct foo x = { "quirk", "foobar" }; 

вместо этого?

+0

Инициализация элементов структуры имеет смысл; на самом деле, C++ разрешает его с 2011 стандартом ISO, возможно, создавая неявный конструктор. Семантика кажется достаточно ясной; каждый созданный объект этого типа будет иметь эти элементы, инициализированные по умолчанию указанными значениями. C просто не позволяет этого. –

2

Вы делаете что-то неправильно. Вы не можете назначать значения членам структуры ... вы находитесь в середине определения типа данных, а не его экземпляра.

Это даст вам ваше определение структуры, а затем непосредственно объявить переменную (с инициализацией) его типа:

struct foo { 
    char *bar; 
    char *qux; 
} variable_name = { 
    "baz", "abc" 
};