我的程序中有一些带有交叉指针的结构,它们的定义如下:
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;
答案 0 :(得分:4)
这是你的问题:
typedef struct
{
...
struct myvar *next;
struct myvar *prev;
...
} myvar;
你应该把它改成这个
typedef struct myvar_
{
...
struct myvar_ *next;
struct myvar_ *prev;
...
} myvar;
问题在于,在第一个版本中,您告诉编译器将会有struct myvar
的定义。但是你永远不会定义一个名为myvar
的结构。您只有一个匿名结构,typedef
为myvar
,不计算在内。因此next
和prev
仍然是不完整的类型。
答案 1 :(得分:4)
我也经常遇到这些问题:)转发声明你的typedef可以帮助你处理你的情况:
typedef struct _myvar myvar;
typedef struct _variables variables;
struct _myvar
{
...
myvar *next;
myvar *prev;
...
};
struct _variables
{
...
myvar *first;
...
};