C语言中的结构定义问题

C语言中的结构定义问题,c,pointers,structure,C,Pointers,Structure,我的程序中有一些带有交叉指针的结构,它们的定义如下: typedef struct { ... struct myvar *next; struct myvar *prev; ... } myvar; typedef struct { ... myvar *first; ... } variables; 我在下一段代码中遇到了一个奇怪的错误: variables *Variables; ... Variables->first->prev->next = Va

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

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

typedef struct
{
 ...
 myvar *first;
 ...
} variables;
我在下一段代码中遇到了一个奇怪的错误:

variables *Variables;
...
Variables->first->prev->next = Variables->first;
我用的是微软的Visual Studio,上面写着

error C2037: left of 'next' specifies undefined struct/union 'myvar'
<>我已经把它编译成C代码(/TC),在C++模式下都可以。问题是什么?除了这样的问题,还有其他解决办法吗

tmp = Variables->first->prev;
tmp->next = Variables->first;
这是你的问题:

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
仍然是不完整的类型。

我也经常遇到这些问题:)向前声明您的typedef应该对您的情况有所帮助:

typedef struct _myvar myvar;
typedef struct _variables variables;

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

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

+1:非常微妙的问题是,您可以使用
struct myvar
指向带有标记
myvar
的未知结构类型,该结构不是给定typdef名称的结构
myvar
。尾随下划线不是必需的;我只需使用
typedef struct myvar{…}myvar因为标记名和typedef名是不同的名称空间。最好显示哪一行出错。“\u1”开头名保留给编译器内部使用,不应使用此名称