链接静态单例类

时间:2012-03-01 21:07:01

标签: c++ linker singleton

当我尝试链接一个SIngleton类时,获取

sources/singleton.cpp:8:41: error: no se puede declarar que la función miembro ‘static myspace::Singleton& myspace::Singleton::Instance()’ tenga enlace estático [-fpermissive]
sources/director.cpp:19:35: error: no se puede declarar que la función miembro ‘static void myspace::Singleton::Destroy()’ tenga enlace estático [-fpermissive]
myspace: *** [objects/singleton.o] Error 1

Singleton类:

#Singleton.h
#include <stdlib.h>

namespace myspace {

    class Singleton
    {
    public:
        static Singleton& Instance();
        virtual ~Singleton(){};
    private:
        static Singleton* instance;
        static void Destroy();
        Singleton(){};
        Singleton(const Singleton& d){}
    };
}

#Singleton.cpp
#include "../includes/Singleton.h"

namespace myspace {
    Singleton* Singleton::instance = 0;

    static Singleton& Singleton::Instance()
    {
        if(0 == instance) {
            instance = new Singleton();

            atexit(&Destroy);
        }

        return *instance;
    }

    static void Singleton::Destroy()
    {
        if (instance != 0) delete instance;
    }
}

我需要一些LDFLAGS到链接器?

2 个答案:

答案 0 :(得分:7)

您只能在声明中声明静态方法,在实现中不允许这样做。只需将您的实施更改为;

Singleton& Singleton::Instance()
{

void Singleton::Destroy()
{

你应该没事。

答案 1 :(得分:4)

您需要从cpp文件中的 definitions 中删除static:编译器已经知道Singleton::InstanceSingleton::Destroystatic来自他们的声明。其他一切看起来都不错。