6

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

#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’

如果我评论这个“链接测试”声明,那么一切都很好。此外,如果我将 'link' 替换为 'Link' 之类的其他名称,也一切正常。

Visual StudioVC中,代码还可以......所以它让我很困惑。

4

2 回答 2

1

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

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

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

于 2013-03-28T12:04:56.263 回答
0

有一个int 链接(const char *path1, const char *path2); unistd.h 中的函数,它似乎包含在 iostream 中。Gcc 过去曾遇到过此类问题。(我注意到 4.7.2 没有显示这种行为。)

正如 MSalters 所指出的,添加一个

class link test;

应该消除问题。

于 2013-03-28T12:17:43.973 回答