Проблема определения структур в C - PullRequest
3 голосов
/ 23 июля 2011

В моей программе есть несколько структур с кросс-указателями, они определены так:

typedef struct
{
 ...
 struct myvar *next;
 struct myvar *prev;
 ...
} myvar;

typedef struct
{
 ...
 myvar *first;
 ...
} variables;

И я получаю странную ошибку в следующем фрагменте кода:

variables *Variables;
...
Variables->first->prev->next = Variables->first;

Я использую MS Visual Studio, и он говорит

error C2037: left of 'next' specifies undefined struct/union 'myvar'

Я установил его на Compile as C Code (/ TC), в режиме C ++ все в порядке. В чем проблема и есть ли обходной путь, кроме как что-то подобное?

tmp = Variables->first->prev;
tmp->next = Variables->first;

Ответы [ 2 ]

4 голосов
/ 23 июля 2011

Я тоже постоянно сталкиваюсь с этими проблемами :) Объявление ваших typedefs должно помочь вам в вашей ситуации:

typedef struct _myvar myvar;
typedef struct _variables variables;

struct _myvar
{
    ...
    myvar *next;
    myvar *prev;
    ...
};

struct _variables
{
    ...
    myvar *first;
    ...
};
4 голосов
/ 23 июля 2011

Вот ваша проблема:

typedef struct
{
 ...
 struct myvar *next;
 struct myvar *prev;
 ...
} myvar;

Вы должны изменить это на

typedef struct myvar_
{
 ...
 struct myvar_ *next;
 struct myvar_ *prev;
 ...
} myvar;

Проблема в том, что в первой версии вы говорите компиляторубыть определением структуры myvar.Но вы никогда не определяете структуру с именем myvar.У вас просто есть анонимная структура, а typedef как myvar, что не считается.Так что next и prev остаются неполными.

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