引用返回空白值
Reference returning blank value
我正在编写一个链表,并使用我的 main
函数对其进行测试。这是我的代码:
#include <iostream>
using namespace std;
class LinkedList {
int value;
LinkedList* next;
public:
LinkedList(int valueIn, LinkedList* nextIn) {
value = valueIn;
next = nextIn;
}
LinkedList(int valueIn) {
value = valueIn;
}
int getValue() {
return value;
}
void addNode(LinkedList* node) {
next = node;
}
LinkedList& getNext() {
return *next;
}
};
int main() {
cout << "starting..." << std::endl;
LinkedList list1(1);
LinkedList list2(2, &list1);
cout << list1.getValue() << " --> " << list1.getNext().getValue() << std::endl;
return 0;
}
我希望输出为 1 --> 2
,但我得到 1 -->
。据我了解,getNext()
应该 return 对另一个列表的引用(在本例中为 list2
),但似乎出了点问题。我的调试工作告诉我 list2
在初始化时确实有正确的 value
2,但是当它被引用用于最终输出时,它似乎没有 value
的任何内容。我一辈子都弄不明白为什么会这样。有人可以帮我理解吗?
您将 list1(实际上是一个节点)插入到 list2 的末尾,而不是相反,但您在 list1
上调用了 getNext()
。您应该将 main 中的代码更改为以下内容:
int main() {
std::cout << "starting..." << std::endl;
LinkedList list1(1);
LinkedList list2(2, &list1);
std::cout << list2.getValue() << " --> " << list2.getNext().getValue() << std::endl;
return 0;
}
请注意,还有一些其他事项需要更改:
- 创建一个列表class和一个节点class会让事情变得更清楚
- 在
LinkedList(int valueIn)
构造函数中将指针初始化为 NULL
(或 C++11 中的 nullptr
)
- Return指向
getNext()
中节点的指针而不是复制节点
您得到的不是空白值。实际上,当您尝试调用 list1.getNext().getValue()
时,您的程序正在崩溃,因为 getNext()
正在返回对 NULL 的引用。
你做的与你想做的相反。
你的 list2
指向 list1
而 list1
指向 NULL
.
您应该这样更改您的代码:
LinkedList list2(2);
LinkedList list1(1, &list2);
cout << list1.getValue() << " --> " << list1.getNext().getValue() << std::endl;
我正在编写一个链表,并使用我的 main
函数对其进行测试。这是我的代码:
#include <iostream>
using namespace std;
class LinkedList {
int value;
LinkedList* next;
public:
LinkedList(int valueIn, LinkedList* nextIn) {
value = valueIn;
next = nextIn;
}
LinkedList(int valueIn) {
value = valueIn;
}
int getValue() {
return value;
}
void addNode(LinkedList* node) {
next = node;
}
LinkedList& getNext() {
return *next;
}
};
int main() {
cout << "starting..." << std::endl;
LinkedList list1(1);
LinkedList list2(2, &list1);
cout << list1.getValue() << " --> " << list1.getNext().getValue() << std::endl;
return 0;
}
我希望输出为 1 --> 2
,但我得到 1 -->
。据我了解,getNext()
应该 return 对另一个列表的引用(在本例中为 list2
),但似乎出了点问题。我的调试工作告诉我 list2
在初始化时确实有正确的 value
2,但是当它被引用用于最终输出时,它似乎没有 value
的任何内容。我一辈子都弄不明白为什么会这样。有人可以帮我理解吗?
您将 list1(实际上是一个节点)插入到 list2 的末尾,而不是相反,但您在 list1
上调用了 getNext()
。您应该将 main 中的代码更改为以下内容:
int main() {
std::cout << "starting..." << std::endl;
LinkedList list1(1);
LinkedList list2(2, &list1);
std::cout << list2.getValue() << " --> " << list2.getNext().getValue() << std::endl;
return 0;
}
请注意,还有一些其他事项需要更改:
- 创建一个列表class和一个节点class会让事情变得更清楚
- 在
LinkedList(int valueIn)
构造函数中将指针初始化为NULL
(或 C++11 中的nullptr
) - Return指向
getNext()
中节点的指针而不是复制节点
您得到的不是空白值。实际上,当您尝试调用 list1.getNext().getValue()
时,您的程序正在崩溃,因为 getNext()
正在返回对 NULL 的引用。
你做的与你想做的相反。
你的 list2
指向 list1
而 list1
指向 NULL
.
您应该这样更改您的代码:
LinkedList list2(2);
LinkedList list1(1, &list2);
cout << list1.getValue() << " --> " << list1.getNext().getValue() << std::endl;