Frage zur templatespezialisierung



  • also ich habe eine kleine frage zur template spezialisierung

    so sehen die templates aus (TemplDecl.h)

    template<int I, const char* H, int N>class ZahlenFeld
    {
      ....
    }
    
    template<int I, const char *H, int N, const long* A> class DiskretFeld : public
      ZahlenFeld<I, H, N >
    {
     .....
    }
    

    hier ein typedef

    const char typeName[254] = "typename" ;
    const long ary[5] ;
    
    typedef DiskretFeld<1,typeName, 2, ary> beispielType ;
    

    und die verwendung in test.h

    beispielType x ;
    

    vs6 spuckt mir folgende meldung aus

    TemplDecl.h(185) : error C2971: 'ZahlenFeld' : Vorlagenargument 'H' : Ungueltige Adresse der lokalen Variablen 'H'
    TemplDecl.h(233) : Siehe Deklaration von 'ZahlenFeld'
    TemplDecl.h(356) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage '?$ZahlenFeld@$03$1H0?0' \\test.h(35) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'DiskretFeld<1,&char * typeName,2,&long const * const ary ime>' TemplDecl.h(191) : fatal error C1903: Weiterverarbeitung nach vorhergehendem Fehler nicht moeglich; Kompilierung wird abgebrochen. TemplDecl.h(356) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage '?ZahlenFeld@$03$1H$0?0'
    Befehlszeilenwarnung D4028 : Fehler beim minimalen Neukompilieren, alles wird neu kompiliert

    bcb6 und VS2005 schlucken es

    wenn ich das richtig sehe, kann VS6 auch mit aktuellstem sp nicht mit einem solchen Konstrukt umgehen. Gibt es einen trick den man ggf. anwenden könnte um es hinzukriegen?



  • Ebenso wie Variablennamen dürfen auch Template-Parameter sinntragende Bezeichnungen sein 💡


  • Mod

    arrays degenerieren hier nicht zu pointern (und sind folglich zu den template parametern inkompatibel). möglich wäre z.b. ein

    typedef DiskretFeld<1,&typeName[0], 2, &ary[0]> beispielType ;
    


  • Any schrieb:

    Ebenso wie Variablennamen dürfen auch Template-Parameter sinntragende Bezeichnungen sein 💡

    naja der code is nicht von mir ... ich muss ihn nur von nem anderen compiler auf vs zum laufen bringen. Und glaub mir den schlimmsten codebrocken hast du nicht gesehen. Allerdings hat dein kommentar nichts mit meinem Problem zu tun, sprich entweder erzähl mir was brauchbares oder lass es!

    @camper
    danke für die info, allerdings funkts so nicht

    error C2964: Ungueltiger Ausdruck als Vorlagenparameter

    naja ich hab mich gestern noch bischen eingelesen und VS6 unterstützt ja diverse template funktionalitäten nicht. Mit .net gehts ja ...


Anmelden zum Antworten