Определение функции в классе заголовка с использованием ее собственной структуры?

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. Я ошибся?

0

Решение

Однако основная проблема заключается в прототипе функции 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;
^^^^^^^^^^^^

Вам нужно прочитать о Вложенные классы.

3

Другие решения

Попробуйте переместить прототип findEvens после определения struct Node, Вы должны удалить private: теперь.

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;
};
0
По вопросам рекламы [email protected]