2017-03-02 1 views
-1

Ich bin mir nicht ganz sicher über den Wortlaut meiner Situation, die es schwierig macht, die Antwort zu finden. Wenn es eine Klasse A gibt, die ein privates Mitglied einer anderen Klasse B (has-a-Beziehung) hat, wie gehe ich dann vor, um den Konstruktor der Klasse A zu erstellen? auch, keine passende Funktion für Aufruf von ‚classB :: classB()‘ und dann Kandidaten Listen auf der Grundlage ihrer Argumente und wie viele ich zur Verfügung gestellt:Wie man eine Klasse als eine Art in einer Funktion übergeben

Klasse A Konstruktor:

classA::classA(int a, int b, classB c); 

das gibt mir „Fehler natürlich "erwartete primäre Funktion vor c." Ich vermisse wahrscheinlich etwas ziemlich Großes, weshalb der Code sehr allgemein gehalten ist, so dass ich nur eine allgemeine Antwort brauche, um mich in die richtige Richtung zu lenken.Man kann annehmen, dass der Rest des Codes für B und A so minimal wie möglich ist. Thanks!

+0

Es wäre hilfreich, wenn Sie auch den Konstruktorcode hinzufügen könnten. Wie auch immer, es scheint, als ob der Konstruktor von A versucht, sein B-Mitglied mit einem Konstruktor zu initialisieren, der keine Parameter annimmt, während letzterer keinen hat. – mcrlc

+0

Nicht genug Kontext. Der einzelne Doppelpunkt in Klasse A: Klasse A ist verdächtig. Ist das ein Label für Goto? –

+0

Es würde Ihre Frage verbessern, um den beteiligten Code zu zeigen. [Http://stackoverflow.com/help/mcve] –

Antwort

0

Folgende Erklärung sollte funktionieren.

class classB 
{ 
public : 
    int b; 
    classB() 
    { 
     b = 1; 
    } 
}; 

class classA 
{ 
public: 
    classA(int a, int b, classB c) 
    { 
     ;// 
    } 
}; 

int main() 
{ 
    classB b; 
    classA a(1, 2, b); 

    return 0; 
} 

Nun, ich denke, was Sie haben getan ist, Ihre Erklärung von classB erfolgt nach classA

class classA{ 
    ... 
} 

class classB{ 
    ... 
} 

Und schließlich, wenn classB ist innerhalb classA deklariert, um es an den Konstruktor zu übergeben, muss es statisch sein. so was.

+0

Ich denke, er schlägt vor, dass "Klasse B" enthält als Elementvariable 'A a;' –

+0

Ja, danke. Bearbeitet. – Ultraviolet

1

Wie ich verstehe, haben Sie ein privates Mitglied B innerhalb der Klasse A, die Sie in der Initialisierungsliste Ihres Konstruktors nicht initialisieren. Als Ergebnis wird der Standardkonstruktor von B aufgerufen, der, wie der Fehler andeutet, nicht verfügbar ist.

class A { 
    B b; 
public: 
    A(/* parameters */) 
    : b(/* parameters to construct b */) // missing part 
    { } 
}; 
Verwandte Themen