Ostream身份不明?

时间:2013-09-06 11:43:06

标签: c++ function-pointers ofstream

所以我有这个头文件有两个使用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文件之前,我得到了一个不同的错误,说明使用类模板需要模板参数列表。但似乎已经消失了。

2 个答案:

答案 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)