2012-11-27 32 views
1

我在Xcode的C++程序C++運算符重載聲明爲朋友

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

它給我list_template尚未宣佈第二個聲明中的錯誤聲明重載運算符的朋友嗎?

如果我#包括其中list_template聲明,我得到更多的問題文件...

+0

什麼是錯誤信息? – melpomene

+0

那麼,你有沒有聲明(和定義)'list_template'?第一行似乎也是一個朋友聲明。無論如何,這有什麼好處? – jogojapan

+0

錯誤消息是,list_template尚未聲明,還有另一條消息說預期,或...在< – user9352

回答

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; 
} 

至少我認爲這是你要去的地方。