Невозможно назначить переменную структуры в заголовочном файле - PullRequest
3 голосов
/ 11 апреля 2011

У меня есть заголовочный файл, включающий структуру, подобную этой:

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

Но при компиляции с cc он показывает ошибку в строке назначения (int index = -1):

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

я должен добавить функцию инициализации для инициализации переменных?

Ответы [ 4 ]

6 голосов
/ 11 апреля 2011

Вы предоставляете не объявление переменной, а определение типа. Вы не можете назначить значения по умолчанию для структурных полей в typedef.

Если вы хотите присвоить начальное значение структурной переменной, попробуйте:

stack myStack = { .index = 1 };

Это работает в C99.

4 голосов
/ 11 апреля 2011
typedef struct
{
    int index;
    stack_node *head;
} stack;

stack getStack()
{
    stack st;
    st.index = -1;
    return st;
}
1 голос
/ 11 апреля 2011

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

stack s = { -1, 0 };

Попробуйте это.

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

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

Как то так. Дайте мне знать, если это не сработает, потому что я пишу базу на небольшом количестве памяти и долгое время не писал много Си.

UPDATE: Мне нравится ответ @mouviciel, я не знал, что можно инициализировать индивидуальную переменную-член с помощью префикса. спереди. Узнал что-то. Спасибо.

1 голос
/ 11 апреля 2011

В C вы не можете назначать переменные внутри структуры.

Однако при создании каждого экземпляра их следует инициализировать в другой функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...