LNK2019错误,尝试覆盖运算符<<对于LinkedList类

时间:2016-03-09 23:39:48

标签: c++ singly-linked-list

我已宣布我的运营商<<在LinkedList类中:

    friend ostream& operator<< (ostream& s, LinkedList<Type>& list);

并定义它:

template <class Type>
ostream& operator<< (ostream& s, LinkedList<Type>& list) {
    s << "[";
    LinkedList<Type>* t = list;
    while (*t._next != NULL) {
        s << *t._info;
        *t = *t._next;
        if (*t._next != NULL) {
            s << ", ";
        };
    };
    s << "]";
    return s;
}

每当我试着打电话时:

LinkedList<int>* list = new LinkedList<int>();
list.add(<some int>);
cout << *list << endl;
当我尝试编译时,它会抛出LNK2019错误。

如果我在没有星号的情况下尝试它,它只输出列表指向的地址。我查看了有关运营商的其他问题&lt;&lt;最常见的答案是该函数实际上并未在任何地方定义。

1 个答案:

答案 0 :(得分:0)

从引用转换为指针时,您必须使用运算符(&)的地址。此外,在处理指针时,最好使用->运算符,因为.运算符优先于*运算符。这段代码应该有效:

template <class Type>
ostream& operator<< (ostream& s, LinkedList<Type>& list) {
    s << "[";
    LinkedList<Type> * t = &list;
    while (t->_next != NULL) {
        s << t->_info;
        t = t->_next;
        if (t->_next != NULL) {
            s << ", ";
        };
    };
    s << "]";
    return s;
}