1

我在 Xcode C++ 程序中将重载运算符声明为友元

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

它给了我一个关于 list_template 没有被声明的第二个声明的错误?

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

4

1 回答 1

1

如果我了解您要执行的操作,您将缺少 list_template 的全局前向声明:

我的类.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 回答