我正在尝试编写一个链接列表类,其中包含一些基本功能,如添加节点,删除节点和在列表中递归搜索。我已经将列表的头部定义为私有变量,但我需要为递归搜索函数访问它,所以我尝试定义一个GetHead()函数,它将返回指向head的指针。但是我在NetBeans中编译时遇到了一些麻烦。
这是类标题
class List{
private:
typedef struct node{
int data;
node* next;
}*nodePtr;
nodePtr head;
nodePtr curr;
nodePtr temp;
public:
List();
void AddNode(int addData);
void DelNode(int delData);
void PrintList();
void SearchRecursive(nodePtr Ptr, int searchVal);
nodePtr GetHead();
};
GetHead()函数如下:
nodePtr List::GetHead(){
return head;
}
当我编译时,我得到了
error: unknown type name 'nodePtr'
error: cannot initialize return object of type 'int'
with an lvalue of type 'nodePtr' (aka 'List::node *')
我是如何将指针返回结构节点的?
答案 0 :(得分:4)
nodePtr
在List
中定义,因此您需要正确的范围:
List::nodePtr List::GetHead()
^^^^^^
答案 1 :(得分:0)
有两种方法可以进行编译:
1)您已在私有范围内的类中定义了一个结构....它将它隐藏在世界其他地方。 但正如juanchopanza指出的那样,你需要指定范围。
2)另一种方法是在类外部定义节点,它应该可以在不改变函数原型的情况下工作。
第一个会更好,因为除了链表类之外,世界其他地方都没有用它。