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 ?
beitemplate <> 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 SacheMit 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-BugsUnd 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!