创建C+的新实例+;类,结果是重复的 我是C++新手。我正在尝试实现LinkedList,为此我创建了两个类Node和LinkedList

创建C+的新实例+;类,结果是重复的 我是C++新手。我正在尝试实现LinkedList,为此我创建了两个类Node和LinkedList,c++,oop,singly-linked-list,C++,Oop,Singly Linked List,我创建了一些测试函数。一个用于测试节点的创建,另一个用于测试链接列表中的isEmpty函数。然而,当我尝试测试它们时。在“testNode()中创建的内容最终与我在LinkedList中创建的节点相同 这可能是个小问题,但是作为C++的新手,这个概念至今还不清楚。我想知道为什么它引用的是以前创建的同一个实例 #include <iostream> #include <assert.h> using namespace std; class Node { pri

我创建了一些测试函数。一个用于测试
节点的创建,另一个用于测试
链接列表中的
isEmpty
函数。然而,当我尝试测试它们时。在“testNode()
中创建的内容最终与我在
LinkedList
中创建的节点相同

<>这可能是个小问题,但是作为C++的新手,这个概念至今还不清楚。我想知道为什么它引用的是以前创建的同一个实例

#include <iostream>
#include <assert.h>

using namespace std;

class Node
{
    private:
        int data;
        int next;

    public:

        int getData(){return data;}
        void setData(int new_data) {data = new_data;}

        int getNext(){return next;}
        void setNext(int new_next) {next = new_next;}

};


class LinkedList
{
    Node head;
    Node head2;

    public:

        bool isEmpty()
        {
            if (head.getData() == 0) {return true;}
            return false;
        }

};

void testNode()
{
    Node aNode;
    aNode.setData(15);
    aNode.setNext(23);

    assert (aNode.getData() == 15);
    assert (aNode.getNext() == 23);
}

void testEmptyLinkedList()
{
    LinkedList ll;
    assert (ll.isEmpty() == true);
}
#包括
#包括
使用名称空间std;
类节点
{
私人:
int数据;
int-next;
公众:
int getData(){return data;}
void setData(int new_data){data=new_data;}
int getNext(){return next;}
void setNext(int new_next){next=new_next;}
};
类链接列表
{
节点头;
节点头2;
公众:
布尔是空的
{
如果(head.getData()==0){return true;}
返回false;
}
};
void testNode()
{
节点阳极;
阳极。设定数据(15);
阳极。setNext(23);
断言(阳极.getData()==15);
断言(阳极.getNext()==23);
}
void testemtylinkedlist()
{
链接列表ll;
断言(ll.isEmpty()==true);
}
初始化数据

int data = 0;
int next = 0;

#include <iostream>
#include <cassert>

using namespace std;

class Node {
  private:
    int data = 0;
    int next = 0;

  public:
    int getData() { return data; }
    void setData(int new_data) { data = new_data; }

    int getNext() { return next; }
    void setNext(int new_next) { next = new_next; }
};

class LinkedList {
    Node head;
    Node head2;

  public:
    bool isEmpty() {
        if (head.getData() == 0) {
            return true;
        }
        return false;
    }
};

void testNode() {
    Node aNode;
    aNode.setData(15);
    aNode.setNext(23);

    assert(aNode.getData() == 15);
    assert(aNode.getNext() == 23);
}

void testEmptyLinkedList() {
    LinkedList ll;
    assert(ll.isEmpty() == true);
}

int main() {
    testEmptyLinkedList();
}
#包括
#包括
使用名称空间std;
类节点{
私人:
int数据=0;
int next=0;
公众:
int getData(){return data;}
void setData(int new_data){data=new_data;}
int getNext(){return next;}
void setNext(int new_next){next=new_next;}
};
类链接列表{
节点头;
节点头2;
公众:
布尔是空的{
if(head.getData()==0){
返回true;
}
返回false;
}
};
void testNode(){
节点阳极;
阳极。设定数据(15);
阳极。setNext(23);
断言(阳极.getData()==15);
断言(阳极.getNext()==23);
}
void testemtylinkedlist(){
链接列表ll;
断言(ll.isEmpty()==true);
}
int main(){
testEmptyLinkedList();
}

如果您打算实现LinkList,则列表的每个节点都应该包含下一个节点的地址

所以“next”应该声明为指向节点的指针。列表的第一个节点也是如此

class Node {
private:
     int data;
     Node *next;
     ....
};

class LinkedList {
private:
     Node *head;
     ...
};

当您尝试从构造函数中读取值时,您永远不会在构造函数中初始化
数据
下一步
,从而导致未定义的行为。练习和学习新内容并体验特定设计中出现的问题总是很好的,但请记住,您应该避免使用C/C++中的链表。有一个来自C++语言的作者自己的视频解释了为什么你应该避免这个设计,而使用<代码> STD::向量< /代码>。查一查@梭鱼谢谢你的信息。我正在做C++学习过程的一部分。我在工作时会记住这一点。好消息!。如果我有一个节点,它的数据实际上是0,而下一个节点也是0。(不确定这在LinkedList背后的理念下是否可行)。在这种情况下,有没有办法将其初始化为NULL?