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*
Однако это уже определено
Вы используете тип до того, как это увидит компилятор в том же файле. Таким образом, компилятор не может понять, что 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;
^^^^^^^^^^^^
Вам нужно прочитать о Вложенные классы.
Попробуйте переместить прототип findEvens после определения 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;
};