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
newnicht funktionieren):functionTakingAFoo(Foo()); Foo().fooMemberFunction(); Foo f = Foo() + Foo(); Foo f = Foo(); ...