Funktions-Template Problem

Cappaja

Erfahrenes Mitglied
Hallo,

ich habe 5 Pointer unterschiedlichen Datentyps. Die Adressen sollen in die erste Spalte einer Liste eingetragen werden. Ich erhalte anstelle der korrekten Adressen einen anderen Wert der für alle Zeilen derselbe ist! Liegt der Fehler an der Konvertierung der Speicheradresse in einen String oder habe ich grundlegend einen Fehler mit meinem Funktions-Template? Ich musste es kurioserweise mitsamt Implementierung in der Header-Datei anlegen, da ich anderenfalls Linkerprobleme beim Aufruf der Funktion bekam....
Weiß jemand wo der Fehler liegen könnte?

Header-Datei
C++:
public:
	short int* pSV1;
	int*       pSV2;
	long int*  pSV3;
	float*     pSV4;
	double*    pSV5;

	template <typename T> void GetAdress(T pSV)
	{
		for(int i=0; i < 5; i++);
		{
			CString adr;
			adr.Format("%d", &pSV);
			m_List.InsertItem(i, adr);
		}
	}

CPP-Datei
C++:
	GetAdress(pSV1);
	GetAdress(pSV2);
	GetAdress(pSV3);
	GetAdress(pSV4);
	GetAdress(pSV5);
 
Hallo,

überleg dir mal, was passiert, wenn du T durch einen der Typen ersetzt. Du ermittelst hier die Adresse der lokalen Variable, die den übergebenen Parameter enthält.

Grüße, Matthias

PS:
Ich musste es kurioserweise mitsamt Implementierung in der Header-Datei anlegen, da ich anderenfalls Linkerprobleme beim Aufruf der Funktion bekam....
Kurios ist das nicht. Der Compiler muss für jede Ausprägung des Templates eine eigene Funktion erzeugen. Er kann aber nicht voraussagen, welche Ausprägungen in den einzelnen Objektdateien benötigt werden. Deswegen muss die Implementierung in jeder Objektdatei vorhanden sein (die das Template verwenden will).
 
Zuletzt bearbeitet:
ah okay, das bedeutet das ich für meinen Anwendungsfall Funktions-Templates vergessen kann...
Ich wollte lediglich Schreibarbeit sparen aber so muss ich wohl alles 5mal schreiben, schade ich dachte das geht einfacher...

danke
 
das meinte ich damit auch nicht. Gibt es denn eine andere Möglichkeit dieses Problem zu beheben, sodass ich nicht 5mal dasselbe schreiben muss?
 
ja genau das habe gebraucht ;)
habe gerade soviel um die Ohren das ich an einen const pointer gar nicht dachte.

Vielen Dank!
 
Zurück