2012-09-12 21 views
2

我的C++有點生疏。任何人都可以看到爲什麼我在訪問i時在main()中看到「不是類或名稱空間」編譯時錯誤。不是類或名字空間

#include <iostream> 

using namespace std; 

class Singleton2 { 
    Singleton2(){ 
     i = 0; 
    } 
public: 
    int i; 

    friend Singleton2 & singleton2(); 
}; 

Singleton2 & singleton2(){ 
    static Singleton2 ms; 

    return ms; 
} 

int main() { 
    Singleton2 ms = singleton2(); 
    int i = ms::i;    // error: `ms' is not a class or namespace 
    cout << i << endl; 
} 

回答

2

您使用點.操作符來訪問非靜態成員,而不是範圍解析操作::

int i = ms.i; 

注意以下

Singleton2 ms = singleton2(); 

分配使得複製的你的單身。您的singleton2()返回一個參考,因此您應該也可以參考ms

Singleton2 &ms = singleton2(); 
相關問題