الإعلان إلى الأمام واسم TypEnty باستخدام كلمة رئيسية جديدة
-
26-09-2019 - |
سؤال
أحصل على خطأ أدناه في الفئة "أ" يعلن مؤشرًا جديدًا من النوع ب. الرجاء المساعدة.
#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 لأن المؤشرات بنفس الحجم ، لكن لا يمكنك بناء واحدة أو أخذ واحدة حسب القيمة دون توفير تعريف الفئة للمترجم. كيف يمكن معرفة كيفية تخصيص الذاكرة لنوع غير معروف؟
لا تنتمي إلى StackOverflow