Frage

Ich habe zwei Klassen

class a {
    public:
        a(int i);
};

class b {
    public:
        b(); //Gives me an error here, because it tries to find constructor a::a()
        a aInstance;
}

Wie kann ich es so bekommen, dass Ainstance mit einem (int i) instanziiert wird, anstatt zu versuchen, nach einem Standardkonstruktor zu suchen? Grundsätzlich möchte ich die Aufruf des A -Konstruktors von A innerhalb von Bs Konstruktor steuern.

War es hilfreich?

Lösung

Sie müssen eine (int) explizit in der Liste der Konstruktor -Initialisierer aufrufen:

b() : aInstance(3) {} 

Wobei 3 der Anfangswert ist, den Sie verwenden möchten. Obwohl es irgendetwas int sein könnte. In den Kommentaren für wichtige Notizen zu Bestellung und anderen Vorbehalten finden Sie.

Andere Tipps

Verwenden Sie eine Initialisierungsliste:

b::b() : aInstance(1) {}

Verwenden Sie einfach einen Konstruktor, der so definiert ist:

class b {
public:
    b()
    : aInstance(5)
    {}
    a aInstance;
};

Ich denke, Sie sollten einen Zeiger auf 'a' verwenden:

class b {
public:
    b() : aInstance(new a(5)) {}
    a *aInstance;
};

Auf diese Weise haben Sie das Verhalten definiert. Natürlich müssen Sie im Destruktor befreien.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top