Standardparameter lässt keine Alternativen zu
-
mach einen minimalen compilierbaren code, der das fehlerverhalten zeigt. meist loest man dabei das problem.
-
krass, das CWheel:: hab ich uebersehen. welcher compiler laesst denn das zu?
-
Hi, danke erstmal,
hier hab ich jetzt was zurechtkopiert, damit ihr dass ausführen könnt:
#include <stdio.h> class CVector { public: float x, y; CVector( float nx = 0, float ny = 0 ) : x( nx ), y( ny ) {} const CVector& operator =(const CVector *Vector) { x = Vector->x; y = Vector->y; return *this; } }; class CWheel { public: CVector Position, Velocity, Gravity; float Radius, LR; CWheel( CVector nPosition = CVector( 0, 0 ), CVector nVelocity = CVector( 0, 0 ), float nRadius = 0, float nLR = 0, CVector nGravity = CVector( 0, 0 ) ): Position( nPosition ), Velocity( nVelocity ), Radius( nRadius ), LR( nLR ), Gravity( nGravity ) {} CWheel operator =( CWheel *Wheel ) { Position = Wheel->Position; Velocity = Wheel->Velocity; Radius = Wheel->Radius; return *this; } void ShowValues() { printf( "Position.x = %f\n", Position.x ); printf( "Position.y = %f\n", Position.y ); printf( "Velocity.x = %f\n", Velocity.x ); printf( "Velocity.y = %f\n", Velocity.y ); printf( "Radius = %f\n", Radius ); printf( "LR = %f\n", LR ); printf( "Gravity.x = %f\n", Gravity.x ); printf( "Gravity.y = %f\n", Gravity.y ); } } Wheel; int main() { Wheel = new CWheel( CVector( 7, 7 ), CVector( 7, 7 ), 7, 7, CVector( 7, 7 ) ); Wheel.ShowValues(); return 1; }
Ausgabe:
Position.x = 7.000000 Position.y = 7.000000 Velocity.x = 7.000000 Velocity.y = 7.000000 Radius = 7.000000 LR = 2.000000 Gravity.x = 2.000000 Gravity.y = 2.000000 Press any key to continue
Wäre euch echt sehr verbunden, wenn ihr mir da helfen könntet...
(alle Parameter werden mit 7 initialisiert, aber bei den letzten drei Werte werden mit dem Standardparameter belegt, macht dass es Siebenen sind...)mfG D1B
-
*lol*
dein op= ist n bisschen komisch...
mach da mal die zeiger raus und schreib den code dann ordentlich... momentan ists nur ein schoenes anschauungs material wie operatoren ueberladung auch missbraucht werden kann.
-
btw:
dein fehler scheint liegt im op=von den stilistischen mal abgesehen.
-
Die op=s können eh weg, weil die automatisch generierten schon das richtige tun. Warum Gravity und "LR" nicht mitkopiert werden sollen, weiß ich nicht, aber es ist bestimmt nicht intuitiv für den Benutzer von op=. Ansonsten ist der Code eh seltsam und leakt.
-
Ich hab leider nie ein Beispiel gesehen, wie ich den Operator = überladen soll, hab mir das nur so ma fix zusammengebastelt und bin auch immer gut damit gefahren...
CVector operator =(CVector Vector) { x = Vector.x; y = Vector.y; return *this; } CWheel operator =( CWheel Wheel ) { Position = Wheel.Position; Velocity = Wheel.Velocity; Radius = Wheel.Radius; return *this; } Wheel = CWheel( CVector( 7, 7 ), CVector( 7, 7 ), 7, 7, CVector( 7, 7 ) );
So besser? Vielleicht könnt ihr mir mal schreiben, wie ihr das lösen würdet... Soweit danke auf jeden!
mfG D1B
-
aber doch nicht by value...
-
CWheel operator =( CWheel Wheel ) { Position = Wheel.Position; Velocity = Wheel.Velocity; Radius = Wheel.Radius; return *this; }
Wenn ich diesen Operator rauslasse klappts tatsächlich, ich danke euch also!!! Ich frage mich aber weiterhin, woran lag es??? Und zusätzlich wäre ich dankbar, wenn ihr mal zeigen könntet, wie ihr den Code schreiben würdet, ich will schließlich noch dazulernen...
Danke nochma,
mfG D1BEdit:
Auch mit diesem Operator per Referenz schlägt die Initialisierung fehl:CWheel& operator =( CWheel Wheel )...
-
bitte beschaeftige dich mit den grundlagen.
einfach so zusammenbasteln ist nicht gut - frag nach wie es richtig gehoert.siehe zB: http://www.schornboeck.net/ckurs/operatoren.htm
lies auch mal volkards tutorial!