我尝试在C ++中创建以下单例类
#pragma once
#include "stdafx.h"
#include <iostream>
class God
{
private:
static God* firstObject;
God()
{
if (firstObject != NULL)
firstObject = this;
}
public:
static God* BuildGod()
{
if (firstObject != NULL)
return firstObject;
else {
God();
return firstObject;
}
}
};
然后像这样使用它
God* a = God::BuildGod();
Unfortunatley,它甚至不会编译,它返回了以下错误:
LNK2001未解析的外部符号“private:static class God * God :: firstObject”(?firstObject @ God @@ 0PAV1 @ A)
LNK1120 1未解决的外部
答案 0 :(得分:1)
必须在类之外定义类的静态成员,例如
class God
{
...
};
God* God::firstObj;
请注意,在头文件中定义并将其包含在mamy times中会引发麻烦。
答案 1 :(得分:1)
你实际上有一个更糟糕的问题而不是构建错误,因为你创建了一个临时对象,并保存了一个指向它的指针。
声明
let testNSNumber: NSNumber = NSNumber(float: myfloatvalue)
创建一个临时对象,并在构造函数中保存指向God();
中此临时对象的指针,然后返回该对象。然后使用该指针将导致未定义的行为。
在C ++中创建单例的常用方法之一就是:
firstObject