Mein C++ ist eigentlich noch ziemlich dürftig, aber ich glaube, ich konnte die zwei Fehler entdecken, die Problem darstellen. Ich verstehe zwar nicht wieso der zweite bei dir nicht aufgefallen ist, aber gut dann ist das halt so.
Der erste Fehler ist, dass Template-Klassen komplett in Header-Datei definiert sein müssen.
Der zweite Fehler, und das verstehe ich bei dir nicht ganz, sind die nicht vorhandenen Zeiger. Wenn du "Configuration::instance()->test()" gehst du davon aus, dass "instance()" ein "Configuration*" zurückgibt, bei dir war es aber nur ein "Configuration". In dieser Zeile "m_instance = new T()" erstellst du ein "Configuration*" und willst es in "Configuration" speichern, diese Zeile wird vermutlich erst nach der Korrektur des ersten Fehlers Probleme machen.
Ich habe noch den Rückgabedatentypen von deleteInstance geändert, weil du dort nichts zurück gibst.
Code:
// PublicClass.h
#pragma once
template <typename T>
class PublicClass
{
public:
static T* instance();
static void deleteInstance();
private:
static T* m_instance;
};
template <typename T>
T* PublicClass<T>::m_instance = nullptr;
template <typename T>
T* PublicClass<T>::instance()
{
if (m_instance == nullptr)
m_instance = new T();
return m_instance;
}
template <typename T>
void PublicClass<T>::deleteInstance()
{
if (m_instance != nullptr)
delete m_instance;
}