2013-03-03 35 views
-1

有人給我做了一個單例結構的示例代碼。現在我一直試圖添加它(POD成員)並實際使用它(首先在main()中,然後在其他函數中使用)。它與我試圖添加分析的行進行compliles。有人能告訴我怎麼做我想用它做什麼?Singleton結構。有人可以告訴我如何做到這一點?

有人給我做了一個單例結構的示例代碼。現在我一直試圖添加它(POD成員)並實際使用它(首先在main()中,然後在其他函數中使用)。它與我試圖添加分析的行進行compliles。有人能告訴我怎麼做我想用它做什麼?

//What - oh - what, does one have to do to get this sob to format the code correctly! 

#include<iostream> 
using namespace std; 

const int MAXNAME = 31; 

struct Singleton { 
private: 

Singleton() {} 
Singleton(const Singleton&); // Disabling copy-ctor 
Singleton& operator=(const Singleton&); 

static Singleton* instance; 

public: 

int DeptNum; 
char Name[MAXNAME]; 
int Age; 
int EmplID; // key field 

static Singleton* GetInstance() { 
    if (!instance) 
     instance = new Singleton(); 

    return instance; 
} 

}; 

Singleton* Singleton::instance = NULL; 
//Singleton* TmpRec = Singleton* Singleton::instance; <- COMMENTED BECAUSE WRONG 

int main(void) { 

    //Access POD members and load them with data 

    //TmpRec-> DeptNum = 30; <- COMMENTED BECAUSE WRONG 

    //Print out POD members 

    //cout << "Value of DeptNum is: " << TmpRec->DeptNum << endl; <- COMMENTED BECAUSE WRONG 

    return 0; 
} 

PS:這件事情是我的命格式化代碼...


編輯:

問題不在於我是否應該使用一個單身與否。這不是關於單身人士在實踐中是好還是壞。這不是關於任何以前的問題關於單例結構(結構是這裏的操作詞 - 不是類)。它甚至不關於結構和類之間的區別。

我付了很多會費來學習如何學習最好。是的,我也一直在學習基礎知識(所有時間)。這個問題的目的是得到一個ACTUALLY工作的小代碼(編譯沒有錯誤,並且執行一些簡單的事情,我需要在行動中看到)。

Downvoting me,因爲你不喜歡我的問題?那麼,我無法控制,這是我猜想的人的特權。

那些想添加真正具有建設性的東西......非常感謝。

那些只是表現得像......呃'下襬!跳過你...

+0

塊被縮進文本完成四個空格:http://stackoverflow.com/editing-help #code – 2013-03-03 18:55:31

+2

[Whyyyyyyyy ?!](http://jalf.dk/singleton/) – Xeo 2013-03-03 19:00:59

+0

-1太多的單身人士。 -1太多'NULL'。 -1太多'新''。 -1太多的指針。 – 2013-03-03 19:06:27

回答

1

,第一部分是好的,第二部分應該是:

Singleton* TmpRec = NULL; 

int main(void) { 
    TmpRec = Singleton::GetInstance(); 
    TmpRec->DeptNum = 30; 
    cout << "Value of DeptNum is: " << TmpRec->DeptNum << endl; 
    return 0; 
} 

注意的GetInstance距離主調用,例如::從不使用。

至於完全運行的代碼,這裏是它使用的參考,而不是指向一個版本:

的代碼
#include<iostream> 
using namespace std; 

const int MAXNAME = 31; 

struct Singleton { 
private: 
    Singleton() {} 
    Singleton(const Singleton&); 
    Singleton& operator=(const Singleton&); 

    static Singleton* instance; 

public: 
    int DeptNum; 
    char Name[MAXNAME]; 
    int Age; 
    int EmplID; 

    static Singleton& GetInstance() { 
     if (!instance) { 
      instance = new Singleton(); 
     } 
     return *instance; 
    } 
}; 
Singleton* Singleton::instance = NULL; 

int main(void) { 
    Singleton &TmpRec = Singleton::GetInstance(); 
    TmpRec.DeptNum = 30; 
    cout << "Value of DeptNum is: " << TmpRec.DeptNum << endl; 
    return 0; 
} 
+0

似乎@Nemanja伊萬諾維奇擊敗了我 – Dave 2013-03-03 19:01:53

+1

哦,沒有必要讓TmpRec成爲全球化的;如果你喜歡,你可以在main中定義它(事實上,這將是首要的單身人士的主要原因;任何你檢索它的函數都會給你相同的實例,它只是一個隱藏的全局值) – Dave 2013-03-03 19:04:38

+0

〜/ Desktop $ g ++ -o CodePad.bin CodePad.cpp CodePad.cpp:在函數'int main()'中: CodePad.cpp:36:4:錯誤:'TmpRec'未在此範圍內聲明 http ://ideone.com/RcbbkV – Jake 2013-03-03 19:05:42

1

代碼不正確,因爲您使用的是私有數據成員實例而不是公共成員函數GetInstance()。

+0

可以請某人'顯示'我的代碼是正確的嗎? (包括訪問成員,將數據加載到成員中,將數據從成員中打印出來)。 – Jake 2013-03-03 18:56:08

+0

@Jake:正確的代碼如下:......什麼,你什麼都看不到?好,因爲Singleton是一種反模式。它很爛,它很受歡迎,請不要使用它。 – Xeo 2013-03-03 19:03:33

相關問題