如标题所述。以下代码显示错误:
#include <iostream>
using namespace std;
class link
{
public:
link()
{
num=0;
next=NULL;
}
int num;
link* next;
};
int main() {
link test;
return 0;
}
使用
编译此代码g++ test.cpp -o test
我的g ++版本是
g ++(Ubuntu / Linaro 4.6.3-1ubuntu5)4.6.3
编译器显示以下错误
test.cpp: In function ‘int main()’:
test.cpp:18:10: error: expected ‘;’ before ‘test’
如果我评论这个'链接测试'语句,那么一切都好。 此外,如果我用“链接”等其他名称替换“链接”,一切都还可以。
在 Visual Studio 或 VC 中,代码正常....所以它让我非常困惑。
答案 0 :(得分:1)
总结评论:
GCC包含名为link
的功能。对于C兼容性,C ++允许您定义与函数同名的结构(或类),但您必须在使用时消除它们的歧义。
即。在这种情况下,修复程序为class link test;
在link
的定义中使用class link
是一个例外,它始终引用类本身。这是必要的,以便能够编写构造函数,因为您无法消除那里的名称歧义。没有允许它的语法。
答案 1 :(得分:0)
unistd.h中有一个int link(const char *path1, const char *path2);函数,它似乎包含在iostream中。 Gcc过去曾遇到过这种问题problems。 (我注意到4.7.2没有显示这种行为。)
如MSalters所述,添加
class link test;
应该消除问题的歧义。