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