2013-11-25 49 views
-2

我在這裏有一個小問題,我無法處理。所以,我宣佈我的班級先生是這樣的:爲什麼我不能在重載「<<」運算符時訪問在我的類中聲明的成員?

typedef unsigned int Uint; 
typedef vector<Uint> TVint; 
typedef vector<Uint>::const_iterator TIterator; 

class Sir 
{ 
protected: 
    Uint _count; 
    TVint _elements; 
public: 
    ... 
    friend std::ostream& operator << (std::ostream &out, const Sir &sir) 
     { 
      for(size_t i = 0; i < sir._count; i++) 
      { 
       out<<"[" << i << "]" << " " << sir._elemente[i]<<endl;    
      } 
     } 
}; 

它說不能訪問在類中聲明的受保護成員。我在想什麼?

+4

'sir._elemente'看起來應該是'sir.elements',但othwerwise您不會錯過任何東西,代碼是好的。 – jrok

+0

看起來你想讓它成爲一個非成員的朋友(因爲有'friend'關鍵字存在),但是通過定義它內聯,它實際上是作爲一個成員函數實現的(這意味着不需要「friend」關鍵字)。編譯器給你的_exact_錯誤信息是什麼? – Chad

+3

@Chad:'friend'關鍵字正是非成員函數的作用。 –

回答

0

有一個錯字,您應該在超載的<<而不是_elemente中使用_elements。你應該從該方法返回的東西:

friend std::ostream& operator << (std::ostream &out, const Sir &sir) 
{ 
    for(size_t i = 0; i < sir._count; i++) 
    { 
     out<<"[" << i << "]" << " " << sir._elements[i] <<endl; 
             //^^^^^^^^^^^^^^^^ 
    } 
    return out; 
    //^^^^^^^^^^^ 
} 

Live code

相關問題