2013-05-30 93 views
0

我有一個類管理文件的內容並將文件轉換爲二進制緩衝區,並且我有一個內部類,它是文件中的一個元素(基本上它代表一行)。像:我可以聲明外部類的成員函數是內部類的朋友函數嗎

class CSR{ 
private: 
    //some fields 
public: 
    Elem operator[](int numRow); 
    //other methods 
public: 
    class Elem{ 
     private: 
      //other fields 
     public: 
      friend CSR::Elem CSR::operator[](int r); 
    }; 
}; 

編譯器(VS 2012和快遞)告訴「CSR沒有成員operator []的」

+1

你能指出編譯器抱怨的行號嗎?另外,什麼是'SVDFeatureCSR'? – arne

+0

@arne我聲明朋友功能的行。我已經簡單地將SVDFeatureCSR更改爲CSR – zoujyjs

回答

0

我不知道的語言規則是什麼,但前宣佈ELEM似乎使雙方gcc 4.7和VS 2010開心:

class CSR{ 
private: 
    //some fields 
public: 
    class Elem; 
    Elem operator[](int numRow); 
    //other methods 
public: 
    class Elem{ 
     private: 
      //other fields 
     public: 
      friend CSR::Elem CSR::operator[](int r); 
    }; 
}; 
0

你需要一個你的內部類的前向聲明 - 但不幸的是,這是不允許的。
This post有一些可能的解決辦法 - 沒有特別吸引人的。

相關問題