سؤال

أحصل على خطأ أدناه في الفئة "أ" يعلن مؤشرًا جديدًا من النوع ب. الرجاء المساعدة.

#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;
}
هل كانت مفيدة؟

المحلول

كان هناك العديد من الأخطاء في الكود الخاص بك. هذه مرتبطة بالإعلان الأمامي ، واستخدام الاسم المؤهل بالكامل وما إلى ذلك.

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

نصائح أخرى

b* obj_b = new b;

وهناك مشكلتك. يمكنك إعلان مؤشر إلى B لأن المؤشرات بنفس الحجم ، لكن لا يمكنك بناء واحدة أو أخذ واحدة حسب القيمة دون توفير تعريف الفئة للمترجم. كيف يمكن معرفة كيفية تخصيص الذاكرة لنوع غير معروف؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top