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

Alles rund um die Programmierung mit Qt
Antworten
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

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

Beitrag 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]
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag 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..)
Zuletzt geändert von solarix am 4. Januar 2010 12:15, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Und wo hast Du Deine Template-Implementation hingeschrieben? Doch nicht in die Souce-Datei, oder?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag 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 ;-)
Antworten