Seite 1 von 1

Plugins: Probleme mit auflösen von templates???

Verfasst: 4. Januar 2010 11:39
von AuE
Hi,

ich bin grade dabei mir eine Klasse für Ini Files zu schreiben. Die Klasse soll ein Singleton werden, wobei die getValue Methode diverse Rückgabewerte haben soll. Also dachte ich da an ein Template, Gesagt getan.

Code: Alles auswählen

class Configuration
{
private:
     static Configuration* pCfg;
     Configuration(){};
     Configuration(const Configuration& ){};
     ~Configuration();
public:
     static Configuration* instance();
     static void destroy();

     template<typename T> T getValue(const std::string &);
//     bool getValue(const std::string &);

};

Die getValue sieht noch wie folgt aus:

Code: Alles auswählen

template <typename T>
		T Configuration::getValue( const std::string &paramName)
{
	//if (bOk) bOk = false; //first we set to false to work correct!
	T returnValue = T(); // make the returntype with the returntype standard Ctor

	if (paramName.length() < 1) // if we do not have any Name given we return with bOk ==false and T == std Ctor
	{//TODO}
	else
	{//TODO}
	return returnValue;
}
Das strange: Sobald ich einen Aufruf mache a la

Code: Alles auswählen

Configuration::instance()->getValue<bool>( "reporting enabled"  )
kann er die Funktion nicht auflösen.
/home/user/projects/gui/build/CC_debug: symbol lookup error: /home/user/projects/gui/build/plugins/lib_myplugin_debug.so: undefined symbol: _ZN13Configuration8getValueIbEET_RKSs
Ich würde jetzt vermuten das das nicht geht da das ein Plugin (also so) ist?!

Das komische ist nur das sobald ich bool getValue(const std::string &); reinschreibe funkioniert es-und er geht in meine Template Variante...

Kann mir das wer erklären???? Also wieso das nicht geht? Seh grade den Wald vor lauter Bäumen nicht.
[/quote]

Verfasst: 4. Januar 2010 12:14
von solarix
Befindet sich die Definition in der Header oder in der Source-Datei? Wenn sie sich in der Source-Datei (cc/cpp) befindet, ist der Fehler offensichtlich (dann kann der Compiler beim Aufruf in der Applikation ja keine "getValue<bool>()" erzeugen...). Dann würde die Definition in den Header gehören (es ist ja keine richtige Defintion.. die konkrete Definition (für einen bestimmten Datentyp) wird erst vom Compiler erzeugt.

BTW: Warum Template und nicht einfach ein QVariant? Das wäre einfacher und "Qt-like" (Tablemodels, QSettings..)

Verfasst: 4. Januar 2010 12:14
von Christian81
Und wo hast Du Deine Template-Implementation hingeschrieben? Doch nicht in die Souce-Datei, oder?

Verfasst: 4. Januar 2010 12:48
von AuE
Sch**ße.... ich bin noch besoffen.... Ich habs im Header deklariert und in der cpp nochmal....dadurch hat der Compiler nicht gemeckert aber er konnte es auch net auflösen ;-)