我在Xcode C ++程序中声明了一个重载运算符作为朋友
template <typename T> friend class list_template;
template <typename T> friend ostream& operator<< (ostream &, list_template<T> &);
它在第二个声明中给出了一个错误,即list_template尚未声明?
如果我#include声明list_template的文件,我会遇到更多问题......
答案 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;
}
至少我认为这就在你要去的地方附近。