使用自己的struct在头类中定义一个函数?

时间:2013-01-01 15:05:30

标签: c++ nested-class

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类。我错了吗?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

尝试将findEvens的原型移动到struct Node的定义之后。您现在应该删除private:

答案 2 :(得分: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;
};