-1

シングルトン構造体を作成するためのサンプルコードを誰かが教えてくれました。今、私はそれに(PODメンバー)を追加して実際に使用しようとしています(最初にmain()で、次にleterで、他の関数で)。コメントアウトして追加しようとした行に準拠しています。誰かが私がやろうとしていることをする方法を教えてもらえますか?

シングルトン構造体を作成するためのサンプルコードを誰かが教えてくれました。今、私はそれに(PODメンバー)を追加して実際に使用しようとしています(最初にmain()で、次にleterで、他の関数で)。コメントアウトして追加しようとした行に準拠しています。誰かが私がやろうとしていることをする方法を教えてもらえますか?

//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:これはコードのフォーマットで私を殺しています...


編集:

問題は、シングルトンを使用する必要があるかどうかではありません。シングルトンが実際に良いか悪いかは問題ではありません。それは、私がシングルトン構造体について尋ねた以前の質問についてではありません(構造体はここでは操作用語であり、クラスではありません)。構造体とクラスの違いについてさえISN'Tではありません。

私は自分が最もよく学ぶ方法を学ぶために多くの会費を支払ってきました。はい、私も基礎を勉強しています(いつも)。この質問は、実際に機能する小さなコードを取得することを目的としています(エラーなしでコンパイルされ、実際に確認する必要があるいくつかの簡単なことを実行します)。

私の質問が気に入らないので、私に反対票を投じますか? まあ、私はそれを制御することはできません、それは人々の特権だと思います.

実際に建設的な何かを追加したい人は... どうもありがとう。

ただのように振る舞う人は...ええと!とにかくスキップしてください...

4

2 に答える 2

1

パブリック メンバー関数 GetInstance() ではなくプライベート データ メンバー インスタンスを使用しているため、コードは正しくありません。

于 2013-03-03T18:52:18.873 に答える
1

最初の部分は問題ありません。2 番目の部分は次のようになります。

Singleton* TmpRec = NULL;

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

GetInstance は main 内で呼び出され、::instance は使用されないことに注意してください。

完全に機能するコードについては、ポインターの代わりに参照を使用するバージョンを次に示します。

#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;
}
于 2013-03-03T19:00:18.850 に答える