1

Je reçois une erreur ci-dessous dans la classe a déclarant un nouveau pointeur de type b. S'il vous plaît aider.déclaration avant et nom de type utilisant le nouveau mot-clé

#include <iostream> 

namespace B 
{ 
    class b; 
} 
class a 
{ 
    private: 

    B::b* obj_b; 

    public: 

    a(){} 
    ~a(){} 
    void create() 
    { 
     b* obj_b = new b; 
    } 
}; 
class b 
{ 
    private: 

     a *obj_a; 

    public: 
     b() 
     { 
      obj_a->create(); 
     } 
     ~b(){} 
}; 
int main() 
{ 
    b obj; 

    return 0; 
} 
+2

Je ne vois pas d'erreur, juste un tas de code. Peut-être avez-vous oublié quelque chose? – bk1e

+0

et s'il vous plaît changer les noms. D'autres frappes ne feront pas de mal – Chubsdad

Répondre

1

Il y avait beaucoup d'erreurs dans votre code. Ceux-ci sont liés à la déclaration directe, à l'utilisation du nom complet, etc.

namespace B 
{ 
    class b; 
} 
class a 
{ 
private: 

    B::b* obj_b;   // change 1 (fully qualified name) 

public: 
    void create();   // change 2 (can't use b's constructor now as B::b is not 
          // yet defined) 
    a(){} 
    ~a(){} 

}; 

class B::b     // change 3 (fully qualified name) 
{ 
private: 

    a *obj_a; 

public: 
    b() 
    { 
     obj_a->create(); 
    } 
    ~b(){} 
}; 

void a::create()    // definition of B::b's constructor visible now.  
{ 
    B::b* obj_b = new B::b; // And here also use fully qualified name 
} 

int main() 
{ 
    B::b obj; 

    return 0; 
} 
+0

merci cela a fonctionné. Désolé, je suis nouveau à cela. – pandoragami

+1

@scriptingalias: Ne vous excusez pas de poser des questions. – manneorama

6
b* obj_b = new b; 

Et il y a votre problème. Vous pouvez déclarer un pointeur vers un B parce que les pointeurs ont tous la même taille, mais vous ne pouvez pas en créer un ou en prendre un par valeur sans fournir la définition de la classe au compilateur. Comment pourrait-on savoir comment allouer de la mémoire pour un type inconnu?

+0

Ouais c'est ce que j'ai écrit sur la première ligne mais merci ça marche maintenant – pandoragami

+0

Eh bien, oui, vous vous êtes rendu compte qu'il vous donnait une erreur, mais évidemment pas pourquoi. –

+0

Merci pour cette réponse (maintenant évidente)! –