C中的结构定义问题

时间:2011-07-23 13:04:55

标签: c pointers structure

我的程序中有一些带有交叉指针的结构,它们的定义如下:

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 个答案:

答案 0 :(得分:4)

这是你的问题:

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

你应该把它改成这个

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

问题在于,在第一个版本中,您告诉编译器将会有struct myvar的定义。但是你永远不会定义一个名为myvar的结构。您只有一个匿名结构,typedefmyvar,不计算在内。因此nextprev仍然是不完整的类型。

答案 1 :(得分:4)

我也经常遇到这些问题:)转发声明你的typedef可以帮助你处理你的情况:

typedef struct _myvar myvar;
typedef struct _variables variables;

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

struct _variables
{
    ...
    myvar *first;
    ...
};