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”开头名保留给编译器内部使用,不应使用此名称