0
class List{
        public:
        List();
        void add(int x);
        void remove();
        void display();
        void findingEvens(Node* n, Node* &h);
        private:
        struct Node{
                Node* next;
                int data;

        };
        Node* head;

    };

メンバー関数のヘッダークラ​​スに上記のコードがあります

void findingEvens(Node* n, Node* &h);

問題はメイン クラスにあり、list.h を既にインクルードしているだけでなく、次のコードでエラーが発生します。

    Node *result = 0;
    cout << findingEvens(l, result);
    l.display();

エラーとして、それは言う

error: ‘Node’ was not declared in this scope

しかし、このスコープで宣言するために、すでに list.h クラスをインクルードしています。私が間違っている?

4

3 に答える 3

3

ただし、主な問題は、関数のプロトタイプにありfindingEvents、エラーが発生しますが、Node*既に定義されています

同じファイル内のコンパイラによって認識される前のを使用します。したがって、コンパイラはNode
構造体が宣言された後に関数宣言を移動します。

 public:
        List();
        void add(int x);
        void remove();
        void display();
        private:
        struct Node{
                Node* next;
                int data;

        };
        Node* head;
        void findingEvens(List::Node* n, List::Node* &h);

Node入れ子構造です。完全な修飾子を使用して、どこにあるのかをコンパイラに伝える必要があります。

List::Node *result = 0;
^^^^^^^^^^^^

Nested classesについて読む必要があります。

于 2013-01-01T15:07:44.533 に答える
0

findEvens のプロトタイプを の定義の後に移動してみてくださいstruct Node。を削除する必要がありprivate:ます。

于 2013-01-01T15:10:51.753 に答える
0

この回答はもはや役に立ちませんが、修正されたコードは次のとおりです。

class List{
public:
    List();
    void add(int x);
    void remove();
    void display();

    struct Node {
        struct Node* next;
        int data;
    };

    void findingEvens(Node* n, Node* &h);
private:
    Node* head;
};
于 2013-01-01T15:16:14.017 に答える