所以我有这个头文件有两个使用ostream的函数 我试图重载间接运算符(<<)以允许我使用指向模板化列表节点的指针写入文件。
来自.h文件的是原型
void PrintForward(ostream &out);
void PrintBackward(ostream &out);
ostream& operator<< (ostream &out, List<t> const* p);
然后从.cpp文件
运算符重载函数
ostream& operator<< (ostream &out, ListNode::List const* p)
{
return out << *p;
}
Printforward功能
template <typename T>
void List<T>::PrintForward(ostream &out)
{
ListNode* lp = head;
while(lp != NULL)
{
out << *lp->value;
lp = lp -> next;
}
}
打印功能
template <typename T>
void List<T>::PrintBackward(ostream &out)
{
ListNode* lp = tail;
while(lp != NULL)
{
out << *lp;
lp = lp -> prev;
}
}
目前我得到的只是编译错误
error C2061: syntax error : identifier 'ostream'
但我找不到它。在我将所有函数切换到.cpp文件之前,我得到了一个不同的错误,说明使用类模板需要模板参数列表。但似乎已经消失了。
答案 0 :(得分:0)
您尚未发布所有代码,但我注意到您没有使用std符合ostream:
//.h
std::ostream& operator<< (std::ostream &out, List<t> const* p);
//.cpp
//...
// Either qualify with std, or bring it into scope by using namespace std...
答案 1 :(得分:0)
我在这段代码中可以看到很多问题: 您对运营商的声明&lt;&lt;正在使用模板类t,但没有此模板类的声明,如
template<class t>
ostream& operator<< (ostream &out, List<t> const* p);
这些函数的声明和定义在第二个参数中也不相等:
ostream& operator<< (ostream &out, List<t> const* p);
ostream& operator<< (ostream &out, ListNode::List const* p)
最后,如果您使用的是命名空间std,我不知道您的代码是什么,如果不是,则必须在ostream类之前编写std ::,如下所示:
std::ostream& operator<< (std::ostream &out, List<t> const* p);
std::ostream& operator<< (std::ostream &out, ListNode::List const* p)