报错如下截图所示:
报错源为如下函数:
template<typename T>
ostream& operator<<(ostream& out, const slist<T>& sl)
{
Node* tmp = sl.head;
while (tmp != nullptr)
{
out << *tmp << " ";
tmp = tmp->next;
}
out << endl;
return out;
}
解决办法:
(1)因为Node类型是slist类模板的私有类,故添加作用域如下:
template<typename T>
ostream& operator<<(ostream& out, const slist<T>& sl)
{
//添加了作用域slist::
slist<T>::Node* tmp = sl.head;
while (tmp != nullptr)
{
out << *tmp << " ";
tmp = tmp->next;
}
out << endl;
return out;
}
(2)原先是Node、tmp都报“找不到标识符”,现在就只有tmp报了:
(3)报错原因可能是编译器不认为Node是slist类模板中的一个类型,故添加typename关键词,如下:
template<typename T>
ostream& operator<<(ostream& out, const slist<T>& sl)
{
//添加了作用域slist::,再添加了typename关键词
typename slist<T>::Node* tmp = sl.head;
while (tmp != nullptr)
{
out << *tmp << " ";
tmp = tmp->next;
}
out << endl;
return out;
}
(4)Bingo!程序能正常编译并运行了。