-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:这件事在格式化代码时正在杀死我......


编辑:

问题不在于我是否应该使用单例。这与单例在实践中的好坏无关。这不是关于我之前问过的关于单例结构的任何问题(结构是这里的操作词 - 不是类)。这甚至与结构和类之间的区别无关。

我付出了很多代价来学习如何最好地学习。是的,我也学习基础知识(一直)。这个问题的目的是得到一个实际工作的小代码(编译时没有错误,并且做了几件我需要在行动中看到的简单的事情)。

因为你不喜欢我的问题而拒绝我?好吧,我无法控制,我猜这是人们的特权。

那些想添加一些实际上具有建设性的东西的人......非常感谢。

你们中那些只是表现得像……嗯哼!还是跳过你...

4

2 回答 2

1

代码不正确,因为您使用的是私有数据成员实例而不是公共成员函数 GetInstance()。

于 2013-03-03T18:52:18.873 回答
1

第一部分很好,第二部分应该是:

Singleton* TmpRec = NULL;

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

请注意,在 main 中调用 GetInstance,并且从不使用 ::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 回答