Templates - gleiche und verschiedene Datentypen

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
gelignite
Beiträge: 37
Registriert: 6. Dezember 2007 21:23
Kontaktdaten:

Templates - gleiche und verschiedene Datentypen

Beitrag 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
{brigens ist ein Kezboard/Treiber v;llig [berfl[ssig!
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag 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....
gelignite
Beiträge: 37
Registriert: 6. Dezember 2007 21:23
Kontaktdaten:

Beitrag 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
{brigens ist ein Kezboard/Treiber v;llig [berfl[ssig!
Antworten