Ich implementierte eine Singleton-Klasse für mein Spiel, aber jedes Mal, wenn ich versuche, es zu kompilieren, gibt es einen Kompilierungsfehler. Der Code lautet wie folgt:Fehler in Singleton
//Singleton.h
#pragma once
class Singleton{
public:
static Singleton* Instance();
private:
Singleton(){};
static Singleton* m_instance;
};
Singleton* SingletonInstance = Singleton::Instance();
Singleton.cpp
//Singleton.cpp
#include "Untitled1.h"
Singleton* m_instance = nullptr;
Singleton* Singleton::Instance(){
if(m_instance == nullptr){
m_instance = new Singleton;
}
return m_instance;
}
ich die folgenden Fehler bin immer:
||=== Build: Debug in df (compiler: GNU GCC Compiler) ===| obj\Debug\Untitled1.o||In function `ZN9Singleton8InstanceEv':| C:\Users\Samsung R519\Desktop\Untitled1.cpp|7|multiple definition of `SingletonInstance'| obj\Debug\main.o:C:\Users\Samsung R519\Desktop\main.cpp|4|first defined here| obj\Debug\Untitled1.o:Untitled1.cpp|| undefined reference to `Singleton::m_instance'| obj\Debug\Untitled1.o:Untitled1.cpp|| undefined reference to `Singleton::m_instance'| ||=== Build failed: 4 error(s), 0 warning(s) (0 minute(s), 10 second(s)) ===|
Was mache ich falsch?
Überdenken Sie (a) warum Sie ein Singleton brauchen: es ist fast immer ein Anti-Pattern; und (b) warum Sie hier Zeiger verwenden. Ein einfaches Objekt mit automatischem Speicher zu verwenden und es als Referenz zurückzugeben, ist fast sicher überlegen, es sei denn, Sie benötigen eine verzögerte Initialisierung. –
Mögliches Duplikat von [Singleton Inheritance Linker Error] (http://stackoverflow.com/questions/7750832/singleton-inheritance-linker-error) – anatolyg
Eine andere (bessere?) Möglichkeit, ein Singleton in C++ zu implementieren: http: // stackoverflow .com/a/1008289/3052438 –