c ++中的单例编译错误

时间:2016-01-23 21:48:55

标签: c++ singleton

我尝试在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未解决的外部

2 个答案:

答案 0 :(得分:1)

必须在类之外定义类的静态成员,例如

class God
{
...
};

God* God::firstObj;

请注意,在头文件中定义并将其包含在mamy times中会引发麻烦。

答案 1 :(得分:1)

你实际上有一个更糟糕的问题而不是构建错误,因为你创建了一个临时对象,并保存了一个指向它的指针。

声明

let testNSNumber: NSNumber = NSNumber(float: myfloatvalue)

创建一个临时对象,并在构造函数中保存指向God(); 中此临时对象的指针,然后返回该对象。然后使用该指针将导致未定义的行为

在C ++中创建单例的常用方法之一就是:

firstObject