Question

J'obtiens une erreur ci-dessous dans la classe A déclarant un nouveau pointeur de type b. S'il vous plaît aider.

#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;
}
Était-ce utile?

La solution

Il y avait beaucoup d'erreurs dans votre code. Ceux-ci sont liés à la déclaration de l'avant, 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; 
} 

Autres conseils

b* obj_b = new b;

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

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