【问题标题】:Returning a pointer to struct in a linked list class返回指向链表类中结构的指针
【发布时间】:2015-03-22 18:31:22
【问题描述】:

我正在尝试编写一个具有一些基本功能的链表类,例如添加节点、删除节点和在列表中递归搜索。我已将列表的头部定义为私有变量,但我需要为递归搜索函数访问它,所以我尝试定义一个 GetHead() 函数,它将返回指向头部的指针。但是我在 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 *')

我如何将指向结构节点的指针返回有问题吗?

【问题讨论】:

  • nodePtr GetHead(); 这不适用于public 访问范围,因为nodePtr 是在private 类部分中声明的。
  • @πάνταῥεῖ 实际上,如果你使用auto,它就可以工作。只要你不给私人的东西命名......
  • @juanchopanza 啊,谢谢!很高兴知道,没想到auto

标签: c++ pointers struct linked-list


【解决方案1】:

nodePtr 定义在List 中,因此您需要正确的范围:

List::nodePtr List::GetHead()
^^^^^^

【讨论】:

  • 确定吗? nodePtr typedef 是类private,而GetHead()public
  • @πάνταῥεῖ:这不会阻止你定义函数,它只是让它使用起来有点不方便。
  • 这似乎解决了它。谢谢!
【解决方案2】:

有两种编译方式:

1)您在私有范围内的类中定义了一个结构......这将它隐藏在世界其他地方。 但正如 juanchopanza 指出的那样,您需要指定范围。

2)另一种方法是在类之外定义节点,它应该可以在不更改函数原型的情况下工作。

第一个会更好,因为除了你的链表类之外,世界其他地方对它没有用处。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 2014-09-09
    • 2014-12-30
    • 1970-01-01
    • 1970-01-01
    • 2010-12-01
    相关资源
    最近更新 更多