"Kein geeigneter Standardkonstruktor verfügbar" - Warum wird der Standardkonstruktor überhaupt aufgerufen?

8

Ich habe mir ein paar andere Fragen dazu angeschaut, aber ich verstehe nicht, warum ein Standardkonstruktor in meinem Fall überhaupt aufgerufen werden sollte. Ich könnte nur einen Standardkonstruktor bereitstellen, aber ich möchte verstehen, warum es das tut und was es betrifft.

%Vor%

Ich habe eine Klasse namens ProxyPiece mit einer Member-Variable von CubeGeometry. Der Konstruktor soll eine CubeGeometry aufnehmen und sie der Member-Variable zuweisen. Hier ist die Überschrift:

%Vor%

und die Quelle:

%Vor%

Der Header für die Würfelgeometrie sieht so aus. Es macht für mich keinen Sinn, einen Standardkonstruktor zu verwenden. Brauche ich es trotzdem?:

%Vor%     
AAB 29.03.2013, 19:26
quelle

2 Antworten

24

Ihr Standardkonstruktor wird hier implizit aufgerufen:

%Vor%

Sie möchten

%Vor%

Andernfalls entspricht Ihr ctor

%Vor%

Die Sache nach dem Doppelpunkt wird als Mitgliederinitialisierungsliste bezeichnet.

Übrigens würde ich das Argument als const CubeGeometry& c anstelle von CubeGeomety& c nehmen, wenn ich Sie wäre.

    
Armen Tsirunyan 29.03.2013, 19:27
quelle
4

Die Member-Initialisierung tritt auf, wenn der Konstruktor beginnt. Wenn Sie in der Initialisierungsliste des Konstruktors keinen Initialisierer angeben, wird das Element standardmäßig erstellt. Wenn Sie den Konstruktor, der zum Initialisieren des Mitglieds cube verwendet werden soll, kopieren möchten, verwenden Sie die Elementinitialisierungsliste:

%Vor%

Alles nach dem Doppelpunkt ist die Initialisierungsliste. Dies sagt einfach, dass cube mit c initialisiert werden sollte.

Wie Sie es hatten, wurde das cube Mitglied zuerst standardmäßig initialisiert und dann c wurde Kopie zugewiesen .

    
Joseph Mansfield 29.03.2013 19:28
quelle