2011-08-23 50 views
10

中聲明的私有成員遇到此特定方法的問題,不知道如何解決它!我得到的錯誤是上面:無法訪問在類'std :: basic_ios <_Elem,_Traits>'

「錯誤C2248: '的std :: basic_ios < _Elem,_Traits> :: basic_ios':不能 訪問私有成員類 「的std :: basic_ios <聲明_Elem,_Traits>」 C:\ Program Files文件\微軟的Visual Studio的 10.0 \ VC \ \包括ostream的604"

我的方法是:

ostream operator<<(ostream & stream, ProcessClass const & rhs) 
{ 
    stream << rhs.name_; 
    return stream; 
} 

而且在標題:

friend std::ostream operator<<(std::ostream & stream, ProcessClass const & rhs); 

有關如何解決此問題的任何想法?我認爲這是通過引用而不是價值來傳遞的,但我有點困惑!

回答

12

返回類型應該是ostream &這是對ostream的引用。

ostream & operator<<(ostream & stream, ProcessClass const & rhs) 
{ //^^^ note this! 
    stream << rhs.name_; 
    return stream; 
} 

當通過(而不是參考)返回,那麼這需要目標流的複製,但是複製的在C++中任何流對象已通過具有由拷貝一直禁用 -constructor private

1.還有複製分配。

知道爲什麼任何流的複製已被禁用,請閱讀我詳細的答案在這裏:

+0

現在令人困惑的事情是(我不知道我錯過了什麼)是當我c將它掛到上面(我曾嘗試過)然後我得到一個錯誤... 錯誤C2556:'std :: ostream&operator <<(std :: ostream&,const ProcessClass&)':重載函數不同只能通過來自'std :: ostream運算符<<(std :: ostream&,const ProcessClass&)的返回類型'' 注意。我稍微修改了代碼,但是按照上面的代碼進行編譯,錯誤是在編譯時產生的。 – Fids

+1

@Fids:你在班上定義了兩次。你爲什麼定義了兩次? – Nawaz

4

您不能複製流,而不是返回引用,改變

ostream& operator<<(ostream & stream, ProcessClass const & rhs) 
相關問題