Template



  • Das liegt daran, daß zum Zeitpunkt der Instanzzierung des templates die komplette Definition sichtbar sein muß. Wenn Du Deine Definition jetzt aber in eine Implementierungsdatei auslagerst, dann ist das in der main nicht sichtbar und kann deshalb nicht verwendet werden.

    Es gibt mehrere Möglichkeiten das zu umgehen

    1. export benutzen, das ist aber nicht wirklich eine Option, da mir nur ein Compiler bekannt ist, der das unterstützt. Außerdem kann man sich damit so manch anderes Problem an Land ziehen.

    2. Definition einfach mit in den Header schreiben

    3. Die Definition in ein .inl-File schreiben und das im Header includen.

    mit etwas Makro-Magie kann man 3 auch recht einfach so gestalten, daß export genutzt wird, wenn vorhanden.

    MfG Jester



  • John Doe schrieb:

    Wenn dein Compiler nicht das Schlüsselwort "export" kennt, muss du deine
    Implementierung mit in die Header-Datei packen.

    mfg JJ

    Ich hab MS Studio 6.0 Compiler.

    Export Schlüsselwort kennt er nicht.

    Implementation hab ich in die Header Datei genommen. Der compiler sagt trotzdem "interal compiler error"



  • Oh, ich glaub der 6.0 kann keine member-templates.
    Kommst Du nicht vielleicht mit ner Funktion aus?
    Sonst mußte nen Workaround basteln und für jeden member-template nen klassen-template bauen, das diese Methode enthält.

    MfG Jester



  • Ich komme mit einer Funktion aus.

    Zum Workaround: Hast du ein kleines Beispiel?



  • nicht wirklich. Mußt mal im Forum suchen, es gibt sicher ne Menge dazu. Hume hat da das ein oder andere gebastelt. Ich kenne mich da nicht so aus, mein Compiler kann das. :p



  • Hume, mach mal ein Beispiel.



  • http://www.c-plusplus.net/forum/viewtopic.php?t=69116&highlight=template+workaround

    wäre zum Beispiel eins. Such einfach mal nach template workaround und Autor: HumeSikkins. Da findest Du noch mehr.

    MfG Jester



  • Jester schrieb:

    http://www.c-plusplus.net/forum/viewtopic.php?t=69116&highlight=template+workaround

    wäre zum Beispiel eins. Such einfach mal nach template workaround und Autor: HumeSikkins. Da findest Du noch mehr.

    MfG Jester

    Danke vielmals.



  • Jester schrieb:

    Oh, ich glaub der 6.0 kann keine member-templates.

    Ganz so schlimm ist es nicht. Der VC 6.0 unterstützt Member-Templates, kommt aber nicht mit einer Definition außerhalb der Klassendefinition klar.

    Sprich statt:

    class AClass 
    { 
        //... 
        template<class T> 
        static int StaticMethod(std::vector<T> Vector); 
    }; 
    
    //Impl 
    template <class T> 
    int AClass::StaticMethod(std::vector<T> Vector) 
    { 
        return 0; 
    }
    

    muss man hier:

    class AClass 
    { 
        //... 
        template<class T> 
        static int StaticMethod(std::vector<T> Vector)
        {
            return 0;
        }
    };
    

    schreiben.



  • @HumeSikkens:
    Auch wenn ich das so mache wie du vorschlägst sagt der Compiler:

    *****
    fatal error C1001: INTERNAL COMPILER ERROR
    (compiler file 'msc1.cpp', line 1794)
    Please choose the Technical Support command on the Visual C++
    Help menu, or open the Technical Support help file for more information
    Error executing cl.exe.

    Temp1.exe - 1 error(s), 0 warning(s)
    *****



  • Ändere mal

    AClass::StaticMethod<int>(Vec);
    

    in

    AClass::StaticMethod(Vec);
    

    Keine Ahnung, ob das was bringt. Einen Versuch ist es aber wert.

    Ansonsten, meine Empfehlung ➡ Compilerupdate.



  • Hab alles Vorgeschlagene auspropbiert und kriege immer noch den Compilererror.



  • Hallo,
    kann es sein, dass du kein aktuelles Service Pack (SP 5.0 oder 6.0) für denen VC 6.0 installiert hast?
    Ich kenne deinen Kontext nicht, aber ein einfaches Beispiel wie:

    class AClass 
    { 
    public:
    	//... 
        template<class T> 
        static int StaticMethod(std::vector<T> Vector)
        {
            return 0;
        }
    }; 
    int main()
    {
    	AClass a;
    	vector<int> v;
    	AClass::StaticMethod(v);
    	a.StaticMethod(v);
    
    }
    

    übersetzt mein VC 6.0 SP 5 anstandslos.



  • @HummeSikkins

    Ich hab tatsächlich nie ein SP installiert.

    Ich installiere heute Abend SP6.

    Danke für deine Hilfe

    Bist ein richtiger Experte 😃 )
    Hast mehr Plan von meinem Rechner als ich selbst 😉


Anmelden zum Antworten