使用自己的结构在标题类中定义功能

Defining a function in a header class with using its own struct?

本文关键字:定义 功能 标题 自己的 结构      更新时间:2023-10-16
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类。我错了吗?

但是,主要问题是在函数findingEvents的原型中给出了Node*的错误,但是它已经定义了

您在编译器在同一文件中看到 type 。因此编译器无法理解什么是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;
^^^^^^^^^^^^

您需要阅读嵌套类

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

此答案不再有用了,但是在这里固定的代码:

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