为什么不能使用'link'作为类的名称

alf*_*ofu 6 c++ class

正如标题所述.以下代码显示错误:

#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 StudioVC中,代码没问题....所以它非常困惑我.

MSa*_*ers 1

总结一下评论:GCC 包含一个名为 的函数link。为了与 C 兼容,C++ 允许您定义与函数同名的结构(或类),但您必须在使用时消除它们的歧义。

即在这种情况下,修复方法是class link test;

link在 的定义中使用class link是一个例外,它总是指类本身。这是编写构造函数所必需的,因为您无法消除那里的名称歧义。没有语法允许它。