Explizit initialisiert-Mitglied, das nicht über eine default-Konstruktor
Ich versuche zum instanziieren ein Objekt, das hat keinen Standard-Konstruktor, so dass auf Sie verwiesen werden kann von allen Methoden innerhalb der Klasse. Als ich erklärte, dass es in meiner header-Datei, aber der compiler sagt, dass der Konstruktor für die Klasse erstellen, müssen explizit initialisiert das Mitglied, und ich kann nicht herausfinden, wie das zu tun.
Wirklich dankbar für Eure Antworten, danke im Voraus!
Snippet:
MyClass.h
include "MyOtherClass.h"
class myClass {
private:
MyOtherClass myObject;
public:
MyClass();
~MyClass();
void myMethod();
}
MyClass.cpp
include "MyClass.h"
MyClass::MyClass() {
MyOtherClass myObject (60);
myObject.doSomething();
}
MyClass::myMethod() {
myObject.doSomething();
}
MyOtherClass.h
class MyOtherClass {
private:
int aNumber;
public:
MyOtherClass (int someNumber);
~MyOtherClass();
void doSomething();
}
MyOtherClass.cpp
include "MyOtherClass.h"
MyOtherClass::MyOtherClass (int someNumber) {
aNumber = someNumber;
}
void MyOtherClass::doSomething () {
std::cout << aNumber;
}
- Sie können erstellen Sie einen Zeiger und dynamisch zuordnen es bei der Initialisierung Website.
- Wenn Sie tun kann die Initialisierung bei der Initialisierung der Liste, das ist Ihre beste option, siehe diese Frage. So wäre es
MyClass::MyClass() : myObject(60) { }
- Die Initialisierung der Liste gearbeitet, ich danke Ihnen sehr!!!
- Ich verstehe nicht, das ein Objekt hat keinen Standard-Konstruktor, so dass auf Sie verwiesen werden kann von allen Methoden innerhalb der Klasse. Können Sie erklären, Ihre Logik hier? AFAIK, kann jedes Mitglied verwiesen werden, die von jedem anderen Mitglied, unabhängig von seiner Konstruktion.
- Möglich, Duplikat der Konstruktor für " müssen explizit initialisiert die Referenz Mitglied "
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie fast da. Wenn Sie erstellen ein Objekt in c++, es läuft standardmäßig der default-Konstruktor auf alle seine Objekte. Man kann sagen, die Sprache, welcher Konstruktor zu verwenden, indem diese:
So es nicht versuchen, finden Sie die Standard-Konstruktor, und ruft, welche Sie wollen.
Müssen Sie initialisieren die
myObject
Mitglied in der Konstruktor-Initialisierung-Liste:Bevor Sie in den Körper eindringen der Konstruktor alle member-Variablen müssen initialisiert werden. Wenn Sie nicht angeben, die Mitglied im Konstruktor die Initialisierung der Liste werden die Mitglieder standardmäßig gebaut. Als
MyOtherClass
nicht über eine default-Konstruktor der compiler gibt.Beachten Sie, dass diese Zeile:
in Ihrem Konstruktor erstellen, eine lokale variable, die ist shadowing Ihr
myObject
member-Variablen. Das ist wahrscheinlich nicht das, was Sie soll. Einige Compiler können Sie schalten Sie Warnungen für dieses.Gibt es zwei Fehler
Ihren code
MyOtherClass myObject(60);
ist nicht initialisiert die member der Klasse, aber es ist stattdessen deklarieren eine lokale variable mit dem NamenmyObject
dass verstecken das Mitglied innerhalb des Konstruktors. So initialisieren Sie ein member-Objekt, das nicht über eine default-Konstruktor, den Sie verwenden sollten, member-Initialisierungs-Listen statt.Sie versuchen zu lernen, C++, durch das Experimentieren mit einem compiler. Dies ist der schwerwiegendste Fehler, da es zu einer furchtbar schmerzhaften Weg. Der einzige Weg, um zu lernen, C++ ist erste ein oder zwei gute Bücher und Lesen Sie Sie von vorne bis hinten. Egal, wie viel Sie klug sind, es gibt keine Weise können Sie richtig raten mit C++, und in gewissem Sinne klug zu sein ist gefährlich, wie es passiert in ganz wenigen Orte, die die richtige Antwort ist unlogisch und Konsequenz der historischen Entwicklung der Sprache. Egal, wie schlau Sie sind, es gibt keine Möglichkeit, können Sie ableiten, Geschichte... die Geschichte muss untersucht werden.
Initialisierung des Daten-Mitglied endet vor dem Konstruktor-Funktion Körper.in der Funktion Körper, den Sie nur zuordnen