0

所以我有这个头文件,它有 2 个利用 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;
}

打印转发功能

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 文件之前,我收到了一个不同的错误,指出使用类模板需要模板参数列表。但它似乎已经消失了。

4

2 回答 2

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...
于 2013-09-06T12:12:18.323 回答
0

我可以在这段代码中看到很多问题:您对 operator<< 的声明正在使用模板类 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)
于 2013-09-06T12:16:49.777 回答