C++ - << 运算符重载,链表 - 地址而不是标准输出

标签 c++ c++11 templates operator-overloading

我正在尝试重载输出运算符。

程序编译,但不是输出(节点列表)而是打印一些地址。

你能解释一下我错在哪里吗?

我确信 displayList 函数是正确的。如果您还看到不正确的内容,请告诉我。

编辑: 如果我取消引用 myList,我会收到错误消息: 对 `operator<<(std::ostream&, SingleLinkedList const&)' 的 undefined reference const 有问题吗?

完整的可执行代码 - https://codepad.remoteinterview.io/DPAXORFXKM

输出:

Constructor called...
Display function:
10 --> 20 --> 30 --> 
Display - overloaded operator:
0x9152a10

Destructor called...

template <typename T>
class SingleLinkedList{
protected:
    struct Node{
        T data;
        Node * next;
        Node() : next(nullptr) {}
        Node(const int num) : data(num), next(nullptr) {}
    };

private:
    Node * head;
    Node * tail;

public:
    SingleLinkedList();
    ~SingleLinkedList();
    void insert(T const& value);
    void displayList(std::ostream& stream = std::cout);
    friend std::ostream& operator<<(std::ostream& os, const SingleLinkedList& list);
};

template <typename T>
void SingleLinkedList<T>::displayList(std::ostream& stream){
    Node * temp = nullptr;
    temp = head;

    while(temp!=nullptr){
        stream << temp->data << " --> ";
        temp = temp->next;
    }
    stream << std::endl;
}

template <typename T>
std::ostream& operator<<(std::ostream& os, const SingleLinkedList<T>& list){
    list.displayList(os);
    return os;
}

int main(){

    SingleLinkedList<int> * myList = new SingleLinkedList<int>();

    myList->insert(10);
    myList->insert(20);
    myList->insert(30);
    std::cout << "Display function:" << std::endl;
    myList->displayList();

    std::cout << "Display - overloaded operator:" << std::endl;
    std::cout << myList << std::endl;

    delete myList;
    return 0;
}

最佳答案

您正在将 myList 交给 std::cout。此变量是指向列表的指针。

要打印列表本身,您必须取消引用指针:

std::cout << "Display - overloaded operator:" << std::endl;
std::cout << *myList << std::endl;

关于C++ - << 运算符重载,链表 - 地址而不是标准输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50407004/

相关文章:

c++ - 嵌入 OpenCV Viz3d 和 Qt

c++ - 使用 Eigen 将变换矩阵从世界空间转换为相机空间

c++ - C++ 标准中的重载与默认参数

C++11 无法移动内部有 unordered_map 的类

templates - 我应该如何去写一个 Joomla!模板?

c++ - <未解析的重载函数类型> 带有成员函数指针和模板

DLL 中的 C++ FindProcessWindow

c++ - 如何测试我的阻塞队列实际阻塞

c++ - 谁能告诉我我的代码有什么问题?

C++ struct functor 作为函数模板参数