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

时间:2013-03-28 08:09:17

标签: 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;
}

使用

编译此代码
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 中,代码正常....所以它让我非常困惑。

2 个答案:

答案 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;

应该消除问题的歧义。