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’

この「リンク テスト」ステートメントにコメントすると、すべて問題ありません。また、「リンク」を「リンク」などの別の名前に置き換えても、すべて問題ありません。

Visual StudioまたはVCでは、コードは問題ありません....なので、とても混乱しました。

4

2 に答える 2

1

コメントを要約すると、GCC には という名前の関数linkが含まれています。C との互換性のために、C++ では関数と同じ名前の構造体 (またはクラス) を定義できますが、使用時にそれらを明確にする必要があります。

つまり、この場合、修正はclass link test;

linkの定義内での の使用はclass link例外で、常にクラス自体を参照します。コンストラクターで名前を明確にすることはできないため、これはコンストラクターを記述できるようにするために必要です。それを許可する構文はありません。

于 2013-03-28T12:04:56.263 に答える
0

int link(const char *path1, const char *path2);があります。iostream から含まれているように見える unistd.h の関数。Gcc は、過去にこの種の問題でいくつかの問題を抱えていました。(4.7.2 ではこの動作が見られないことに注意してください。)

MSalters が指摘したように、

class link test;

問題を明確にする必要があります。

于 2013-03-28T12:17:43.973 に答える