【问题标题】:How to write setters and getters for a doubly linked list in c++如何在 C++ 中为双向链表编写 setter 和 getter
【发布时间】:2020-11-05 13:59:03
【问题描述】:

当我尝试在 Node.cpp 中编写 getNext() 方法时,会出现以下错误。请检查 Node.cpp getNext() 方法。我正在尝试为双向链表编写 getter 和 setter,这就是我所拥有的。

class Node

{

    private:

        string phonenumber;
        string name;
        string type;
        Node* next;
        Node* prev;

    public:
        Node(string name, string phonenumber, string type);

        void setNext(Node ptr);
        Node getNext();

        string getName();
        void setName(string name);


        string getPhone();
        void setPhone(string phonenum);


        string getType();
        void setType(string type);

};
#endif

节点.cpp

    #include "Node.h"
    
    Node::Node(string name, string phonenumber, string type)
    {
       //constructor
    }
    
    Node::Node(string name, string phonenumber, string type)
    {
    
    }
    void Node::setNext(Node ptr)
    {
        
    
    }

当我尝试在 Node.cpp 中编写 getNext() 方法时,会出现以下错误。请检查 Node.cpp getNext() 方法。我正在尝试为双向链表编写 getter 和 setter,这就是我所拥有的。

    Node Node::getNext()
    {
    
       return next; /**/ this line gives me an error (it says no suitable constructor exists for Node* to Node)
    }

【问题讨论】:

  • 请注意,您的头文件中有一个杂散的#endif,它缺少#include <string>,您可能在头文件中使用using namespace std;,这是您永远不应该这样做的。您还有同一个构造函数的两个实现。必须删除一个。

标签: c++ c++11 c++14 getter-setter


【解决方案1】:

您的变量nextNode*,而在函数中,您返回的是Node。 将Node 更改为Node*

Node* Node::getNext()
{
   return next;
}

【讨论】:

    【解决方案2】:

    该错误表示它不知道将Node(Node 实例)转换为Node*(指向Node 实例的指针(或nullptr)。

    这些 sn-ps 会让你克服困难:

    //In the class definition:
    
       Node* getNext();
    
    //... 
    // The function definition:
    
    Node* Node::getNext(){
        return this->next;  //or just return next; if you prefer.
    }
    

    在 C++ 中,对象和指向该对象的指针之间存在天壤之别。

    一旦你了解了这个概念,你就在掌握 C++ 方面取得了巨大的飞跃。

    我不知道你的背景,但 Java 掩盖了这一点,因为所有对象变量都是实际上指针(在 C++ 术语中)。 但在 C++ 中,区别很重要,您可以拥有对象变量、指针或引用。但是指针是双向链表中nextprev 的正确答案。

    注意:更好的答案是Node* getNext() const;,但请稍后再担心!

    【讨论】:

      猜你喜欢
      • 2019-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-27
      • 1970-01-01
      • 1970-01-01
      • 2016-11-30
      相关资源
      最近更新 更多