0

したがって、ostream を利用する 2 つの関数を含むこのヘッダー ファイルがあり、間接演算子 (<<) をオーバーロードして、テンプレート化されたリスト ノードを指すポインターを使用してファイルに書き込めるようにしようとしています。

ここの.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 に答える