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;
^^^^^^^^^^^^

您需要阅读有关嵌套类的信息。

于 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 回答