有人给了我制作单例结构的示例代码。现在我一直在尝试添加它(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:这件事在格式化代码上杀了我......
编辑:
问题不在于我是否应该使用单身人士。这不是关于单身人士在实践中是好还是坏。这不是我之前提出的关于单例结构的任何问题(结构是这里的操作词 - 而不是类)。这甚至不是结构和类之间的区别。
我花了很多钱来学习如何最好地学习。是的,我也一直在学习基础知识。这个问题的目的是获得一个实际可行的小代码(编译时没有错误,并且我需要在操作中看到几个简单的事情)。
因为你不喜欢我的问题而贬低我?好吧,我无法控制,我猜这是人的特权。
那些想要添加实际建设性的人...非常感谢。
那些只是表现得像......呃'下摆的人!无论如何都撇开你......
答案 0 :(得分:1)
代码不正确,因为您使用的是私有数据成员实例而不是公共成员函数GetInstance()。
答案 1 :(得分: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;
}