1

XcodeC++プログラムでオーバーロードされた演算子をフレンドとして宣言しました

template <typename T> friend class list_template;
template <typename T> friend ostream& operator<< (ostream &, list_template<T> &); 

list_templateが宣言されていないという2番目の宣言でエラーが発生しますか?

list_templateが宣言されているファイルを#includeすると、さらに問題が発生します...

4

1 に答える 1

1

あなたがやろうとしていることを私が理解しているなら、あなたはlist_templateのグローバル前方宣言を見逃しています:

MyClass.h

// forward declarator. must match definition in list_template.h
template<typename T> class list_template;

class MyClass
{
public:
    MyClass() {};
    virtual ~MyClass() {};

    template<typename T> friend class list_template;
    template<typename T> friend ostream& operator <<(ostream&, const list_template<T>&);
};

list_template.h

template<typename T>
class list_template
{
public:
    list_template() {};
    virtual ~list_template() {};

    // declare friend ostream operator <<
    friend ostream& operator << <>(ostream& os, const list_template<T>& lt);
};

// ostream insertion operator <<
template<typename T>
ostream& operator <<(ostream& os, const list_template<T>& lt)
{
    // TODO: use lt here.
    return os;
}

少なくとも、これはあなたが行っていた場所の近くだと思います。

于 2012-11-27T09:01:26.767 に答える