سؤال

لدي فصلين

class a {
    public:
        a(int i);
};

class b {
    public:
        b(); //Gives me an error here, because it tries to find constructor a::a()
        a aInstance;
}

كيف يمكنني الحصول عليها حتى يتم إنشاء instance مع (int i) بدلاً من محاولة البحث عن مُنشئ افتراضي؟ في الأساس ، أريد التحكم في استدعاء مُنشئ A من داخل مُنشئ B.

هل كانت مفيدة؟

المحلول

تحتاج إلى استدعاء (int) بشكل صريح في قائمة مُهيئة المنشئ:

b() : aInstance(3) {} 

حيث 3 هي القيمة الأولية التي ترغب في استخدامها. على الرغم من أنه يمكن أن يكون أي int. انظر تعليقات للحصول على ملاحظات مهمة على الطلب والتحذيرات الأخرى.

نصائح أخرى

استخدم قائمة التهيئة:

b::b() : aInstance(1) {}

ما عليك سوى استخدام مُنشئ يتم تعريفه على هذا النحو:

class b {
public:
    b()
    : aInstance(5)
    {}
    a aInstance;
};

أعتقد أنه يجب عليك استخدام مؤشر إلى "A" مثل:

class b {
public:
    b() : aInstance(new a(5)) {}
    a *aInstance;
};

بهذه الطريقة سيكون لديك سلوك محدد. بالطبع ستحتاج إلى تحرير *ainstance في المدمر.

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