Immernoch Default-Argumente bei Templates



  • Das hört sich ja nicht gut an 😞

    Wieso hast du die Definition der spezialisierten Methode außerhalb von der
    Klasse hingeschrieben?

    Aber schon mal vielen Dank für deine Mühen!



  • Hab das ganze noch mal getestet:

    In deiner Form kann ich das überhaupt nicht kompilieren

    error C2511: 'std::string test::GetAttributeValue(std::string,std::string,std::string,std::string)' : Überladene Memberfunktion nicht in 'test' gefunden
    

    Und, wenn ich die Spezialisierte Form wieder mit rein nehme, habe ich auch
    in diesem Primitiv-Beispiel wieder den alten Fehler: Also Compiler-Bug!

    Scheiße! Warum immer dann, wenn man es überhaupt nicht gebrauchen kann! 😡

    Gibt es einen (kostenlosen) Compiler, den man leicht in das VS integrieren
    kann und der auch problemlos DirectX Anwendungen, etc. kompilieren wird, ohne
    dass ich alles neuschreiben darf?

    Oder hat doch noch irgendwer eine Lösung?



  • kann es sein das der compiler, da du in der spezialiserten form keine def-argumente hast, auf die nicht spezialisierte form zurückgreift ?
    bei

    template <>
    string GetAttributeValue<string>(string attribute, string tag, string parent, string stdValue)
    {
    [...]
    }
    

    woher soll der compiler wissen, welcher wert er für stdValue nehmen soll ?
    deswegen nimmt er die version:

    template <class T>
    T GetAttributeValue(string attribute, string tag, string parent, T stdValue=T())
    {
    [...]
    }
    

    da weis er das er für den letzen parametern den standart-ctor aufrufen soll.



  • Nene, dass ist schon richtig so. Begründung steht hier:
    http://www.c-plusplus.net/forum/viewtopic.php?t=87869



  • EnERgYzEr schrieb:

    Gibt es einen (kostenlosen) Compiler, den man leicht in das VS integrieren
    kann und der auch problemlos DirectX Anwendungen, etc. kompilieren wird, ohne
    dass ich alles neuschreiben darf?

    Soweit ich weiß ist der neue MS Compiler kostenlos. Ob bzw. wie der sich allerdings ins ein altes Visual Studio integrieren lässt, weiß ich nicht.

    Oder hat doch noch irgendwer eine Lösung?

    Verzichte auf die Default-Parameter und benutze stattdessen Überladungen für zwei, drei und vier Parameter. Das kostet dich vier zusätzliche Funktionen. Da diese aber alle als reine forwarder implementiert werden können, ist dieser Preis zu verschmerzen.



  • HumeSikkins schrieb:

    Soweit ich weiß ist der neue MS Compiler kostenlos. Ob bzw. wie der sich allerdings ins ein altes Visual Studio integrieren lässt, weiß ich nicht.

    In .NET 2002 ist er super integrierbar - vorallem da sich an dem CLI des Compilers nicht viel geändert hat.

    Nicht selber getestet habe ich es beim VC++6 - aber ich habe gehört, dass es auch dort geht.



  • Ich hab momentan einfach auf die Default-Argumente verzichtet und mit
    wichtigeren Sachen weitergemacht. Ist aber schon interessant, dass man gleich
    bei den ersten Versuchen mit Templates auf Fehler und Bugs des Compilers
    stößt. Und das bei so einer einfachen Sache 🙄

    Mit dem neuen MS Compiler muss ich mal sehen, ob das klappt. Ich weiß auch
    nicht, warum es immer noch kein Service Pack für meine IDE gibt. Da sind
    so viele Bugs in dieser Oberfläche.... und jetzt auch noch Compiler-Bugs 😡

    Und stattdeßen bringen die innerhalb von zwei Jahren oder so zwei neue IDEs
    auf den Markt 😕. Für die alte IDE 6.0 gabs doch auch mindestens 5
    Service Packs. Warum nicht für diese Version?

    @Shade: Das hört sich ja gut an. Ich hab ja die 2002er Version.



  • Shade, welchen Compiler hast du denn integriert? Den aus der 2005er Beta
    oder aus dem .NET SDK 1.1 (ist da überhaupt ein C++ Compiler dabei?)? Oder
    einen ganz anderen?



  • Das Toolkit 2003



  • Hab das Toolkit 2003 installiert, aber der Bug besteht weiterhin - schade, aber
    lässt sich nun mal nicht ändern. Aber noch mal vielen Dank allen!


Anmelden zum Antworten