DEUTSCHE VERSION |
|
Links | | | Forums | | | Comments | | | Report news |
Chat | | | Polls | | | Newsticker | | | Archive |
amiga-news.de Forum > Programmierung > StormC 3.0 und Überladen von Operatoren | [ - Search - New posts - Register - Login - ] |
-1- | [ - Post reply - ] |
2003-11-19, 21:00 h Mad_Dog Posts: 1944 User |
Kann es sein, daß StormC 3.0 (im C++ Modus) Probleme mit dem Überladen von Operatoren hat? Habe mir eine Vektor-Klasse (für 3D-Vektoren) gebastelt und hierzu die Operatoren "+" und "=" überladen, daß man z.B. auch zwei Vektoren v1 und v2 einfach mit v3 = v1 + v2 addieren kann. Leider meldet mir der Compiler, daß ein Typkonflikt vorliegt. In diesem fall scheint er nicht zu merken, daß ich die Operatoren "+" und "=" überladen habe... -- http://www.norman-interactive.com [ - Answer - Quote - Direct link - ] |
2003-11-19, 21:36 h mrbbc Posts: 101 User |
etwas genauer wär' nett... will dir ja nicht unterstellen, dass du's mit class ... { void +(); void =(); } probiert hast ;o) Was ist denn überhaupt die Basisklasse ? Wahrscheinlich stimmt einfach der Rückgabewert nicht überein (void statt int...); und da man den Rückgabewert einer Funktion beim Aufruf nicht zwangsläufig erkennt, ist es in C++ nicht erlaubt, gleichnamige Funktionen an zu legen, die sich nur in den Rückgabewerten unterscheiden. [ - Answer - Quote - Direct link - ] |
2003-11-19, 22:03 h Mad_Dog Posts: 1944 User |
Hier mal einige Codeschnipsel:code:typedef float scalar_t; // scalar class Vector3D { public: scalar_t x; // x,y,z components scalar_t y; scalar_t z; public: // Constructors Vector3D(scalar_t a = 0, scalar_t b = 0, scalar_t c = 0) { x = a; y = b; z = c; } Vector3D(const Vector3D &vec) { x = vec.x; y = vec.y; z=vec.z; } usw. Hier das Überladen der Operatoren "+" , "+=" und "=": code:const Vector3D &operator=(const Vector3D &vec) { x = vec.x; y = vec.y; z = vec.z; return *this; } const Vector3D operator + (const Vector3D &vec) const { return Vector3D(x + vec.x, y + vec.y, z + vec.z); } const Vector3D operator + () const { return Vector3D(*this); } const Vector3D operator += (const Vector3D& vec) { x += vec.x; y += vec.y; z += vec.z; return *this; } Das ganze mach ich dann noch für diverse andere Vektoroperationen wie z.B. Skalarprodukt usw. . Und hier das Testprogramm: code:--#include <iostream.h> #include "Vector_Class.cpp" int main() { Vector3D v1(1.0,2.0,3.0); Vector3D v2(2.0,3.0,4.0); Vector3D v3(0.0,0.0,0.0); v3 = v1 + v2; cout << v3.x << endl << v3.y << endl << v3.z << endl; cout << "Ok." << endl; return 0; } http://www.norman-interactive.com [ - Answer - Quote - Direct link - ] |
2003-11-20, 11:16 h Solar Posts: 3680 User |
Schneller Test ergibt: g++ (v3.2) compiliert obigen Code (unverändert) mit --pedantic -Wall ohne Fehler oder Warnungen. [ - Answer - Quote - Direct link - ] |
2003-11-20, 13:58 h Mad_Dog Posts: 1944 User |
Zitat: Danke! Das bestätigt leider meine Befürchtung: Es liegt an StormC 3.0, der nicht merkt, daß ich die Operatoren überladen habe . Wäre noch die Frage offen, ob's mit StormC 4.0 besser geht. Meine gcc-Installation habe ich leider beim Updateversuch verhunzt wo wir wieder bei einem beliebten Thema wären... -- http://www.norman-interactive.com [ - Answer - Quote - Direct link - ] |
2003-11-20, 14:31 h Solar Posts: 3680 User |
Zitat: Der Compiler-Core von StormC 4 ist meines Wissens nach gcc > 2.95. Damit sollte es gehen, nur habe ich ihn nicht zur Hand um das zu testen. Sorry. [ - Answer - Quote - Direct link - ] |
2003-11-20, 23:52 h Holger Posts: 8116 User |
Vielleicht kommt StormC weniger durcheinander, wenn Du die Operatoren Referenzen zurückgeben läßt? Kann's nicht testen, habe StormC nicht mehr. mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Answer - Quote - Direct link - ] |
2003-11-21, 08:43 h Mad_Dog Posts: 1944 User |
Hab jetzt mein gcc wieder zum Laufen bekommen, indem ich ne ältere Version (2.95.x) drüber installiert hab. Damit gab's dann keine Probleme mehr. Fazit: StormC 3.0 ist zwar für C zu gebrauchen, aber nicht für C++. Was auffällt: Die Executables werden mit gcc (bzw. g++) deutlich größer wie bei StormC. -- http://www.norman-interactive.com [ - Answer - Quote - Direct link - ] |
2003-11-22, 02:10 h Dietmar Posts: 166 User |
Zitat: Hast Du die Option zum Entfernen von Symbolen, Kommentaren usw. benutzt? Bei GoldED Studio AIX geht das mit "StripSymbols" auf der Dialog-Seite "Linker". Damit wird das Programm viel kleiner. Keine Ahnung wie die Option in der Kommandozeile heisst. Alternativ kann man das auch nach dem Übersetzen machen: --- Unstripped exes can get quite big, esp if you link with massive linklibs like libstdc++ (which also has alot of debuginfo in it), therefore you should always do the following: strip --strip-unneeded --remove-section .comment myexe -o myexe_stripped This will make a copy of myexe named myexe_stripped, but with all compiler and debuginfo removed, making it significantly smaller .. you could also just leave out "-o myexe_stripped" in which case it will remove it from myexe directly, however you shouldn't do that, as it will make it impossible to debug later... [ - Answer - Quote - Direct link - ] |
-1- | [ - Post reply - ] |
amiga-news.de Forum > Programmierung > StormC 3.0 und Überladen von Operatoren | [ - Search - New posts - Register - Login - ] |
Masthead |
Privacy policy |
Netiquette |
Advertising |
Contact
Copyright © 1998-2024 by amiga-news.de - all rights reserved. |