正如标题所述.以下代码显示错误:
#include <iostream>
using namespace std;
class link
{
public:
link()
{
num=0;
next=NULL;
}
int num;
link* next;
};
int main() {
link test;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译此代码
g++ test.cpp -o test
Run Code Online (Sandbox Code Playgroud)
我的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’
Run Code Online (Sandbox Code Playgroud)
如果我评论这个'链接测试'声明,那么一切都好.此外,如果我用'Link'等其他名称替换'link',一切都还可以.
在Visual Studio或VC中,代码没问题....所以它非常困惑我.
总结一下评论:GCC 包含一个名为 的函数link。为了与 C 兼容,C++ 允许您定义与函数同名的结构(或类),但您必须在使用时消除它们的歧义。
即在这种情况下,修复方法是class link test;
link在 的定义中使用class link是一个例外,它总是指类本身。这是编写构造函数所必需的,因为您无法消除那里的名称歧义。没有语法允许它。