2013-04-22 96 views
1

我有一個單例類。我想爲結構成員分配一個值。但編譯器拋出錯誤爲A nonstatic member reference must be relative to a specific object。 請幫幫我,如何解決同樣的問題。非靜態成員引用必須與特定對象有關Singleton類C++

class abc{ 

    static abc* m_selfInst; 
public: 

    struct abcd{ 
     int a; 
    }abcd; 

abc* GetInstance(); 
}; 

abc* abc::m_selfInst = NULL; 

abc* abc::GetInstance() 
{ 
    if(m_selfInst == NULL) 
    { 
     m_selfInst = new abc(); 
    } 
    return m_selfInst; 
} 
int main() 
{ 
    abc *ab = abc::GetInstance(); //Error Occurs here 
    abc::abcd.a = 5; //Error occurs here too 
    //cout <<ab.abcd.a << "\n"; 

    return 0; 
} 

回答

2

GetInstance應該是static功能。

static abc* GetInstance(); 

訪問a應與abc類型的變量。命名abcdabcd

ab->abcd.a 

結構abcd和對象是讓人有些困惑。 也許這應該是

struct { 
    int a; 
} abcd; 
+0

當我使結構體爲'typedef struct'的時候,我無法從主體訪問結構體名稱,那我該怎麼辦? – 2013-04-22 07:15:18

+0

@RasmiRanjanNayak名稱結構當然。 – ForEveR 2013-04-22 07:18:35

+0

: - 下拉列表中缺少類名,編譯器拋出一個錯誤,因爲「類型名稱不被允許」。例如,'typedef struct abcd {...} ;. 'main(){ab-> abcd.a = 5;}'。在abcd中,錯誤即將發生,'type name is not allowed' – 2013-04-22 07:19:41

4
abc *ab = abc::GetInstance(); 

GetInstance()方法必須聲明static,否則就只能上abc實例調用。

abc::abcd.a = 5; 

這裏,abc::abcd是類型。據推測,你需要參考abcd實例abc實例指着ab

ab->abcd.a = 5; 

你真的應該從給實例和類型相同的名稱(如struct abcd和實例abcd)避免。

+1

@ForEveR謝謝。我對所有'ab','abc'和'abcd'都感到困惑。 – juanchopanza 2013-04-22 07:00:45

相關問題