0

C++の本からコードのブロックを読んでいて、g++を使用してコンパイルしようとしていました

ここにエラーがありました: main.cpp:11:3: エラー: 'link' は型の名前を付けていません main.cpp: コンストラクター 'linklist::linklist()' 内: main.cpp:15:4: エラー: 'first ' はこのスコープで宣言されていません

linklist クラスがリンク構造体を認識しないように見えますが、なぜですか?

コード:

#include <iostream>
using namespace std;
struct link //one element of list
{
    int data; //data item
    link* next; //pointer to next link
};
class linklist //a list of links
{
    private:
        link* first; //pointer to first link   !!!!!!!!Here is the first error ~!!!!!!!!!!!
    public:
        linklist() //no-argument constructor
        {
            first = NULL;
        } //no first link
        void additem(int d); //add data item (one link)
        void display(); //display all links
};
void linklist::additem(int d) //add data item
{
    link* newlink = new link; //make a new link
    newlink->data = d; //give it data
    newlink->next = first; //it points to next link
    first = newlink; //now first points to this
}
void linklist::display() //display all links
{
    link* current = first; //set ptr to first link
    while( current != NULL ) //quit on last link
    {
    cout << current->data << endl; //print data
    current = current->next; //move to next link
    }
}
int main()
{
        linklist li; //make linked list
        li.additem(25); //add four items to list
        li.additem(36);
        li.additem(49);
        li.additem(64);
        li.display(); //display entire list
        return 0;
}
4

2 に答える 2

2

問題は、link という名前が unistd.h 内の link という名前の関数と競合していることです。OS X で g++ を試してください。

于 2013-06-10T15:58:58.253 に答える
0

私が知る限り、おそらくこれを C コードとしてビルドしていると思いますが、g++それを使用してビルドすると問題なく動作しますがgcc、最初のエラーを使用すると次のようになります。

error: 'link' does not name a type

編集

g++したがって、次を追加することでこれを再現できます。

#include <unistd.h>

そのため、名前linkがそのヘッダー ファイル内の何かと競合しているようです。名前linkを別の名前に変更すると、問題が解決するようです。

于 2013-06-10T15:59:16.520 に答える