Question

J'ai deux classes

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;
}

Comment puis-je obtenir pour que AINSTANCE est instancié avec un (int i) au lieu d'essayer de rechercher un constructeur par défaut? Au fond, je veux contrôler l'appel d'un constructeur à l'intérieur du constructeur de b.

Était-ce utile?

La solution

Vous devez appeler un (int) explicitement dans la liste d'initialisation du constructeur:

b() : aInstance(3) {} 

Si 3 est la valeur initiale que vous souhaitez utiliser. Bien qu'il pourrait être tout entier. Voir les commentaires pour les notes importantes sur l'ordre et d'autres mises en garde.

Autres conseils

Utilisez une liste d'initialisation:

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

Il suffit d'utiliser un constructeur qui est défini comme suit:

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

Je pense que vous devez utiliser un pointeur sur 'a' comme:

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

De cette façon, vous aurez le comportement défini. Bien sûr, vous devrez libérer * AINSTANCE dans le destructor.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top