gpt4 book ai didi

c++ - 模板化链表的 ToString?

转载 作者:行者123 更新时间:2023-11-30 02:58:47 25 4
gpt4 key购买 nike

这是我的代码:

template<typename T>
class list {
private:
node<T>* head;
node<T>* tail;
int len;
public:
list(){
this->len = 0;
this->head = this->tail = 0;
}
~list(){
node<T>* n = this->head;
if (!n) return;
node<T>* t = NULL;
while (n){
t = n->next;
delete n;
n = t;
}
}

/* other stuff */

ostream& operator<<(ostream &o, const list<T>& l) {
node<T>* t = l.head;
while (t){
strm << *(t->value);
if (!t->next) break;
strm << ", ";
t = t->next;
}
return strm;
}
};

我得到以下编译错误:

rm bin *.o -f
g++ -g -Wall main.cpp -o bin
main.cpp:110: error: 'std::ostream& list<T>::operator<<(std::ostream&, const list<T>&)' must take exactly one argumentmain.cpp: In function 'int main(int, char**)':
main.cpp:151: error: no match for 'operator<<' in 'std::cout << l'
/usr/include/c++/4.4/ostream:108: note: candidates are: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::basic_ostream<_CharT, _Traits>& (*)(std::basic_ostream<_CharT, _Traits>&)) [with _CharT = char, _Traits = std::char_traits<char>]
... other errors
make: *** [main] Error 1

所以,这是我的问题。我需要做什么才能完成这项工作?我试图关注 this question举个例子。

最佳答案

你的 operator<<被声明为成员函数。您需要使其成为一个自由函数,即在类之外定义它:

template <class T>
class list {
// ...
};

template <class T>
ostream& operator<<(ostream &o, const list<T>& l)
{
// ...
};

如果您需要制作 operator<<类的 friend 那么请看看我对this question的回答

此外,我注意到您正在使用 ostream没有std:: ,暗示您正在使用 using namespace std .

如果你这样做,那么给你的类(class)打电话是一个非常糟糕的主意 list , 因为有一个 std::list将被 using namespace std 拉入范围如果#include <list>将来随时添加到文件中。

关于c++ - 模板化链表的 ToString?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13465110/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com