Konstruktor mit Parametern ohne Parameter aufrufen? C++
-
Hallo Leute,
ich hänge momentan an folgender Aufgabe:
"Implementieren Sie den Konstruktor so, dass der parameterfreie Konstruktor überflüssig wird"Klasse:
class Vector3D { float x, y, z; public: Vector3D(float a, float b, float c) { x = a; y = b; z = c; } Vector3D() { x=0; y=0; z=0; } };
Hierbei habe ich mir gedacht, dass ich dem Konstruktor Vektor3D(float a,....) einfach schon Standardwerte(0) mitgebe. Das würde dann so aussehen:
Vector3D::Vector3D(const float a = 0, const float b = 0, const float c = 0){ x = a; y = b; z = c; }
Doch wenn ich jetzt den Vektor3D(const float a = 0,..... in der main aufrufe, dann ruft der Compiler überhaupt nicht diesen Konstruktor auf
Meine main:
int main() { Vector3D a (); return 0; }
Was mache ich falsch?!? ich hoffe ihr könnt mir dabei weiterhelfen
-
Vector3D a ();
Das ist eine Funktion a die Vector3D als Rückgabewert hat. Mehr gibts nicht als Hinweis
-
out schrieb:
Das ist eine Funktion a die Vector3D als Rückgabewert hat. Mehr gibts nicht als Hinweis
Ich setz' noch einen drauf, damit es sich gezielter recherchieren lässt:
Es hat sich dafür der Ausdruck Most vexing parse eingebürgert (Scott Meyers, Effective STL).
-
es gibt bei C++ keine notation in der der default ctor mit () aufgerufen wird wie bei Java. Entweder du lässt die Klammern weg oder benutzt "uniform-initialization" style also
3DVector vec{};
btw. du solltest für deinen ctor initialization lists benutzen, anstelle der zuweisungen im Funktionsrumpf
-
Sewing schrieb:
es gibt bei C++ keine notation in der der default ctor mit () aufgerufen wird wie bei Java.
new Foo();
C++ oder Java?
Du meinst wahrscheinlich das richtige, aber so wie du es geschrieben hast ist es mMn. falsch. Denn die Schreibweise
Klasse variable(initArgument1, initArgument2, initArgument3);
gibt es in Java soweit ich weiss gar nicht. Und die syntaktischen Konstrukte die ich aus Java kenne wo man einen Konstruktor mit () aufruft funktionieren in C++ ebenso.
Falls das Unsinn ist, und mich hier meine super-löchrigen Java-Kenntnisse im Stich gelassen haben, bitte ich um Korrektur.
ps: Andere Beispiele wo man in C++ den default-ctor mit () aufruft (die allerdings alle in Java wegen des fehlenden
new
nicht funktionieren):functionTakingAFoo(Foo()); Foo().fooMemberFunction(); Foo f = Foo() + Foo(); Foo f = Foo(); ...