Seite 1 von 1

Templates - gleiche und verschiedene Datentypen

Verfasst: 13. September 2008 13:56
von gelignite
Hallo,

ich habe den Datentyp in einer Klasse geändert. Aus dieser Klasse wird aber, wie noch aus einigen anderen Klassen auch, auf eine statische Methode einer weiteren Klasse zugegriffen. Daher habe ich mir gedacht, ich ersetze die statische Methode (die vorher immer nur von einem Datentyp (int) Gebrauch gemacht hat) jetzt durch ein Template.

Vorher:

Code: Alles auswählen

void foobar( int * a, int n )
{
// Implementierung
}
Umstellung auf Template:

Code: Alles auswählen

template <typename T>
void foobar( T * a, T n )
{
// Implementierung
}
Nachdem ich dies Kompilieren wollte, wurde ich freundlich darauf aufmerksam gemacht, dass *a und n gefälligst denselben Datentyp zu haben haben. (Logischerweise)

Daher schnell geändert auf:

Code: Alles auswählen

template <typename T1, typename T2>
void foobar( T1 * a, T2 n )
{
// Implementierung
}
Jetzt mein Problem. Ich bekomme eine "undefined reference", sobald ich mit foobar( int *, int ) zugreife. Ich verstehe nicht wieso. Dürfen T1 und T2 jetzt nicht den selben Datentypen haben? Ich dachte, sie würden so für verschiedene Datentypen gelten, könnten aber auch den selben haben.

Gruß,
gelignite

Verfasst: 16. September 2008 07:33
von AuE

Code: Alles auswählen

template <typenameT1, typename T2> 
void foobar( T1 * a, T2 n ) 
{ 
// Implementierung 
}
.
.
.

foobar(&m_iTimeOutCount, m_iTimeOutCount);


also bei mir geht dat....

Verfasst: 17. September 2008 23:06
von gelignite
Wenn ich es im gVim auf den konkreten Teil runterbreche und nachbaue funktioniert es auch. Ich habe nur nicht verstanden woher die undefined reference kam.

Das Problem hat sich aber von selbst wegoptimiert. Das Ändern des Datentyps hat letztendlich für mehr Ärger gesorgt, als er Nutzen gebracht hat. Von daher ist alles beim Alten.

Gruß,
gelignite