Frage

Ich erhalte eine Fehlermeldung in der unten stehenden einer Klasse einen neuen Zeiger vom Typ b deklarieren. Bitte Hilfe.

#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;
}
War es hilfreich?

Lösung

Es gibt viele Fehler im Code. Diese werden auf Forward-Deklaration verwendet, vollständig qualifizierte Namen Nutzung 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; 
} 

Andere Tipps

b* obj_b = new b;

Und es ist Ihr Problem. Sie können einen Zeiger auf eine B erklären, weil Zeiger alle die gleiche Größe haben, aber Sie können nicht ein Konstrukt oder ohne Angabe der Klassendefinition für den Compiler einen nach dem Wert annehmen. Wie wäre es möglich, Know-how-Speicher für einen unbekannten Typen zuzuordnen?

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