"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > لماذا يظهر خطأ \"لا يوجد مُنشئ افتراضي للفئة\" في لغة C++، وكيف يمكنني إصلاحه؟

لماذا يظهر خطأ \"لا يوجد مُنشئ افتراضي للفئة\" في لغة C++، وكيف يمكنني إصلاحه؟

تم النشر بتاريخ 2024-12-22
تصفح:158

Why Does C   Throw a \

فهم "لا يوجد مُنشئ افتراضي للفئة" خطأ في لغة C

عند العمل مع البرمجة الموجهة للكائنات في لغة C، فإن مواجهة الأخطاء المتعلقة بالمنشئات الافتراضية ليس أمرًا غير شائع. سيساعدك هذا الدليل الشامل في فهم وحل مشكلة "لا يوجد مُنشئ افتراضي للفئة".

وصف المشكلة

يحدث الخطأ "لا يوجد مُنشئ افتراضي للفئة" عند محاولة إنشاء مثيل كائن من فئة دون توفير الحجج اللازمة لمنشئه. المُنشئ الافتراضي هو وظيفة عضو خاصة تقوم بتهيئة كائن بقيمه الافتراضية عندما لا يتم تحديد أي وسيطات.

سبب الخطأ

السبب الأكثر شيوعًا لهذا الخطأ هو عندما يتم تعيين فئة ما تم تعريفها باستخدام منشئ واحد أو أكثر ولكنها تفتقر إلى منشئ افتراضي. بمجرد قيام الفصل بتعريف أي مُنشئ، لن يقوم المترجم تلقائيًا بإنشاء مُنشئ افتراضي.

الحل

لحل هذا الخطأ، لديك ثلاثة خيارات:

1 . تحديد مُنشئ افتراضي:
يمكنك تحديد مُنشئ افتراضي داخل الفئة التي لا تأخذ أي وسائط، كما هو موضح في الفئة المصححة أدناه:

class GameCryptography
{
public:
    Blowfish _blowfish;
    GameCryptography();
    void Decrypt(unsigned char packet[]);
    void Encrypt(unsigned char packet[]);
    Blowfish Blowfish;
    void SetKey(unsigned char k[]);
    void SetIvs(unsigned char i1[],unsigned char i2[]);
};

2. توفير الوسيطات للمنشئ الحالي:
عند إنشاء كائن، يمكنك توفير الوسيطات المطلوبة بشكل صريح للمنشئ، مما يزيل الحاجة إلى المنشئ الافتراضي.

3. استخدم مُهيئ "nullptr":
هذا الخيار قابل للتطبيق فقط في C 20 ويسمح لك بتهيئة كائن إلى nullptr دون تحديد مُنشئ افتراضي بشكل صريح:

GameCryptography* gc = nullptr;

اعتبارات إضافية

أ. تحديد خوارزمية: من المهم ملاحظة أن أوضاع التشغيل، مثل ECB وCBC، لا تعتبر خوارزميات بحد ذاتها. والإشارة إليها على هذا النحو قد تؤدي إلى سوء الفهم.

ب. أخطاء وقت الترجمة مقابل أخطاء وقت التشغيل: عادةً ما يتم اكتشاف أخطاء المنشئ الافتراضي في وقت الترجمة. وهذا على النقيض من أخطاء وقت التشغيل، التي تحدث أثناء تنفيذ البرنامج.

من خلال فهم الأسباب وطرق الحل المقدمة في هذا الدليل، يمكنك معالجة أخطاء "لا يوجد مُنشئ افتراضي للفئة" بشكل فعال عند العمل مع فئات C.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3