2011-11-19 44 views
0

我試圖做一個單身用gccC++單,stackoverflows例如不工作

我發現計算器幾個例子,遺憾的是他們沒有爲我工作。

這裏是我的.h文件:

#ifndef GLOBALINFO_H 
#define GLOBALINFO_H 

#include <string> 
#include <iostream> 

using namespace std; 
class GlobalInfo 
{ 
    private: 
     GlobalInfo(); 
     GlobalInfo(GlobalInfo const&); 
      GlobalInfo& operator=(GlobalInfo const&); 


    public: 
     static GlobalInfo& GetInstance(); 
     virtual ~GlobalInfo(); 

     bool isFullScreen; 
     int screenWidth; 
     int screenHeight; 
     string title; 

    protected: 
}; 

#endif // GLOBALINFO_H 

這裏是我的.cpp:

#include "GlobalInfo.h" 

GlobalInfo::GlobalInfo() 
{ 
    isFullScreen = false; 
    screenWidth = 800; 
    screenHeight = 600; 
    cout << "creating GlobalInfo" << endl; 
} 

GlobalInfo::~GlobalInfo() 
{ 
} 

GlobalInfo &GlobalInfo::GetInstance() { 
    static GlobalInfo instance; 
    return instance; 
} 

GNU C說:

include\GlobalInfo.h|12|error: 'GlobalInfo::GlobalInfo(const GlobalInfo&)' is private| 

如果我刪除

GlobalInfo(GlobalInfo const&); 
GlobalInfo& operator=(GlobalInfo const&); 

從頭,我得到的單身人士,這是不好的在這種情況下的實際副本,因爲我使用isFullScreen根據用戶輸入信息。

+1

[我確定你知道你在做什麼,我只是覺得我會指出單身人士是一個非常有爭議的設計模式。如果你在SO或互聯網上搜索,你會發現很多討論。] –

+0

是的,我知道,但我讀了不少聰明人使用單身人士的書。我不確定爲什麼爭議設計應該意味着「不要使用它」,所有事情都在互聯網上引起爭議。我需要一個全局範圍來訪問我遊戲中任何地方的一些東西(因此名爲GlobalInfo)。作爲一個長期的C程序員(> 20年),但相對較新的C + +我不知道什麼更好的方式來實現這一點,然後通過單身。使用'extern bool isFullScreen'的C方式肯定更糟糕。 – Hellagot

回答

6

你怎麼實際使用單例類?在嘗試調用複製構造函數時,您應該會收到編譯錯誤,因爲獲取單例實例的唯一方法應該是通過GetInstance。也許你忘了調用代碼使用參考:

GlobalInfo& gi = GlobalInfo::GetInstance(); 

如果您忘記了&運營商,你會有效地試圖複製單身,這正確導致編譯錯誤。

+0

非常感謝你,那就是問題所在 – Hellagot