我的代码是:
class cMySingleton{
private:
static bool bInstantiated;
int mInt;
cMySingleton(){
mInt=0;
}
public:
cMySingleton(int c){
if (bInstantiated){
cout << "you can only instantiated once";
}
else {
cMySingleton();
mInt=c;
}
}
};
int main () {
cMySingleton s(5);
cMySingleton t(6);
}
链接器一直在抱怨:
Undefined symbols for architecture x86_64:
"cMySingleton::bInstantiated", referenced from:
cMySingleton::cMySingleton(int) in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
发生了什么事? C ++新手在这里~~
答案 0 :(得分:3)
你应该初始化静态字段。
#include <iostream>
class cMySingleton{
private:
static bool bInstantiated;
int mInt;
cMySingleton(){
mInt=0;
}
public:
cMySingleton(int c){
if (bInstantiated){
std::cout << "you can only instantiated once";
}
else {
cMySingleton();
mInt=c;
}
}
};
bool cMySingleton::bInstantiated = true;
int main () {
cMySingleton s(5);
cMySingleton t(6);
}
您可以在此处找到更多信息:
Static Data Member Initialization
还有缺少include和std :: around cout。
答案 1 :(得分:2)
初始化
static bool bInstantiated;
在cMySingleton
之外
bool CMySingleton::bInstantiated;
答案 2 :(得分:2)
不要忘记在.cpp文件中的类声明之外初始化静态成员:
bool cMySingleton::bInstantiated = false;