当我尝试链接一个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到链接器?
答案 0 :(得分:7)
您只能在声明中声明静态方法,在实现中不允许这样做。只需将您的实施更改为;
Singleton& Singleton::Instance()
{
和
void Singleton::Destroy()
{
你应该没事。
答案 1 :(得分:4)
您需要从cpp文件中的 definitions 中删除static
:编译器已经知道Singleton::Instance
和Singleton::Destroy
是static
来自他们的声明。其他一切看起来都不错。