我试图创建一个包含指向它的指针的结构:
#include <stdio.h>
struct test{
test* t;
};
int main(){
return 0;
}
使用gcc编译时,此代码产生错误:
:5:2:错误:未知类型名称&#39; test&#39;
但是在g ++上编译的时候它很好。
所以我想要理解的是:
1)造成这种差异的原因是什么?我认为如果gcc使用一次通过编译并且g ++使用可以解释它的multipass,但据我所知,这不是真的。
2)如何避免此错误并使用指向它自己类型的指针定义结构? (除非没有其他选择,否则我不想使用空格*或使用铸造)
答案 0 :(得分:6)
你必须在test * t之前编写struct来定义指向struct的指针:
struct test* t;
这是C和C ++之间的一个不同。
答案 1 :(得分:2)
您的语法在&#34; C&#34;中不正确。您必须使用struct <structname>* <varname>;
格式。
在c ++中,你可以省略&#34; struct&#34;在它面前。但是,在C中,您必须编写它来定义指向结构的指针。
固定代码:
#include <stdio.h>
typedef struct test{
struct test* t;
} test;
int main(){
return 0;
}
答案 2 :(得分:0)
您需要typedef
struct test
test
;
才能以这种方式使用它。
这应该可以正常工作:
#include <stdio.h>
struct test{
struct test* t;
};
int main(){
return 0;
}
或者您可以尝试:
#include <stdio.h>
typedef struct test test;
struct test{
test* t;
};
int main(){
return 0;
}
你的问题是gcc是一个C编译器,从字面上理解类型。 如果您使用c ++编译器,它可能无关紧要。 c ++简化了C的类型。 小心这个事实。 C代码将在c ++编译器中编译,但c ++不能在c编译器中编译。