Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
(spezialisiertes) Template

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - C
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
sureal
Gast





BeitragVerfasst am: 20. Dez 2004 9:43   Titel: (spezialisiertes) Template

Hallo!
Meine Frage bezieht sich auf Funktionstemplates. Ich bin gerade am lernen wie man Templates einsetzt. Zu einem habe ich ein Buch und ein Tutorial mit folgender Adresse.
http://www.cpp-tutor.de/cpp/le15/le15_01.htm Die Aussagen sind hier die selben aber ich bekomme von meinem Compiler immer den selben Fehler bezüglich spezialisierter Templates.
Code:
template <typename T>
 T Max(T p1, T p2)
 {
     return ((p1>p2)? p1 : p2);
/*Das ist klar und funktioniert auch*/
}
Code:
/*ein anderer Code mit spezialisiertem Template*/
template<>
char* Max<char*>(char* p1, char* p2)
 {
     if (strcmp(p1,p2) > 0)
         return p1;
     else
         return p2;
/*Hier bekomme ich eine Fehlermeldung die lautet: ... used a non template as a template .....
also soviel wie -das ich ein nicht Template als Template benutzen will*/
 }

Im Buch ist es so beschrieben und wie man sieht in dem Tutorial auch, doch warum geht das nicht?
Ich verstehe es nicht, ich suche in mehreren Quellen aber ich verstehe nicht warum es nicht geht.

Danke für jede Hilfe.
MfG

PS: Kdevelop 3.1.2 (Linux) GCC 3.3.4
DevCpp aktuell mit MinGW (Windows) GCC 3.2.3
 

tj
Gast





BeitragVerfasst am: 22. Dez 2004 14:49   Titel:

Hi,

ich kann dir leider auch nicht direkt helfen,
aber auf jeden Fall laesst sich dein Code mit
dem (good) old GCC2.9 kompilieren.

Hab gerade auch noch mal bei Stroustrup\
geguckt: Dein Code sollte so funktionieren.
Vieleicht ein GCC3.3-Problem?

tj
 

heinrich



Anmeldungsdatum: 22.09.1999
Beiträge: 219
Wohnort: N49.137 E8.544

BeitragVerfasst am: 28. Dez 2004 21:24   Titel:

Das Max<char*> ist aber nur eine Spezialisierung von template<typename T> T Max(...). Ohne dieses Template kannst du keine Spezialisierung Max<char*> vornehmen und bekommst dann zu Recht die Fehlermeldung error: `Max' is not a function template -- schliesslich existiert ja auch kein Funktionstemplate für Max().
Daher musst du bevor du Max<char*> deklarierst auch noch das passende (allgemeine) Funktionstemplate für Max() anlegen.

Das nachfolgende Beispiel ist korrekt und funktioniert fehlerfrei.
Code:

#include<stdio.h>
#include<string.h>

template<typename T>
T Max(T p1, T p2)
{
  return ((p1>p2) ? p1 : p2);
}

template<>
char* Max<char*>(char* p1, char* p2)
{
  if(strcmp(p1,p2)>0) return p1;
  else                return p2;
}

int main()
{
  char* c1 = "a";
  char* c2 = "b";
  int  i1 = 5;
  int  i2 = 8;

  printf("%i -vs- %i => %i\n", i1, i2, Max(i1, i2) );
  printf("%s -vs- %s => %s\n", c1, c2, Max(c1, c2) );
  return 0;
}

_________________
It just works.
 
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name

sureal
Gast





BeitragVerfasst am: 04. Jan 2005 23:47   Titel:

Ja, das war das Problem das ich auch schon im C++ Forum diskutiert habe.
Ich habe das nicht gewusst mit allgemeinem + spez. Template.
Jetzt wo ich es weiß macht es irgendwie Sinn.
Aber danke für die Antworten.
Ich habe an sich ein gutes Buch aber es wird einiges voraus gesetzt scheint mir so. Kann auch sein das ich nicht aufmerksam genug gelesen habe.

So long
 

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - C Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy