引用返回空白值

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;
}

请注意,还有一些其他事项需要更改:

  1. 创建一个列表class和一个节点class会让事情变得更清楚
  2. LinkedList(int valueIn) 构造函数中将指针初始化为 NULL(或 C++11 中的 nullptr
  3. Return指向getNext()中节点的指针而不是复制节点

您得到的不是空白值。实际上,当您尝试调用 list1.getNext().getValue() 时,您的程序正在崩溃,因为 getNext() 正在返回对 NULL 的引用。

你做的与你想做的相反。 你的 list2 指向 list1list1 指向 NULL.

您应该这样更改您的代码:

LinkedList list2(2);
LinkedList list1(1, &list2);
cout << list1.getValue() << " --> " << list1.getNext().getValue() << std::endl;