Template Class Vererben

10/12/2015 00:15 Krijo'#1
Guten Tag liebe Epvper,
und wie ihr im Titel seht hab ich ein Problem:

Ich habe eine Klasse:
Code:
#pragma once

template <typename T>
class PublicClass
{
public:
	static T *instance();
	static void deleteInstance();

private:
	static T *m_instance;
};
Code:
#include "PublicClass.h"

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;
}
Die ich an eine andere Klasse vererben möchte:

Code:
#ifndef CONFIGURATION_H
#define CONFIGURATION_H
#include "PublicClass.h"

#include <iostream>

class Configuration : public PublicClass<Configuration>
{
public:
	Configuration(){}
	~Configuration(){}

        void test() {std::cout << "test";}

}
private:

};

#endif // CONFIGURATION_H
In der Main ruf ich das ganze so Auf:

Code:
Configuration::instance()->test();

Doch dies Funktioniert nicht so ganz wie ich will:
[Only registered and activated users can see links. Click Here To Register...]


Bitte um Hilfe!

Danke im schonmal!
10/12/2015 11:26 ComputerBaer#2
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.
10/12/2015 13:48 Krijo'#3
Oh das andere war ein Fehler von mir sry, hatte es gestern nacht noch schnell als Beispiel gemacht und paar sachen vergessen Teste eben.

Nachtrag:

Jetzt kommt dieser Fehler:
[Only registered and activated users can see links. Click Here To Register...]
10/12/2015 14:04 ComputerBaer#4
Vielleicht ein fehlendes include? Ich weiß es nicht, bei meinem Testaufbau hat so jedenfalls funktioniert. Die C++ Fehlermeldungen des Visual Studios kenne ich nicht.
10/12/2015 14:30 Krijo'#5
Also includes fehlen nicht.

Fehler Fixed, kann geschlossen werden.
10/14/2015 07:13 IceTrailer#6
Quote:
Originally Posted by Krijo' View Post
Also includes fehlen nicht.

Fehler Fixed, kann geschlossen werden.

Vielleicht postest du noch, wie du den Fehler gefixt hast? ;)