C ++重载运算符声明为朋友

时间:2012-11-27 01:30:37

标签: c++ templates

我在Xcode C ++程序中声明了一个重载运算符作为朋友

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

它在第二个声明中给出了一个错误,即list_template尚未声明?

如果我#include声明list_template的文件,我会遇到更多问题......

1 个答案:

答案 0 :(得分: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;
}

至少我认为这就在你要去的地方附近。