عند العمل مع البرمجة الموجهة للكائنات في لغة 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، لا تعتبر خوارزميات بحد ذاتها. والإشارة إليها على هذا النحو قد تؤدي إلى سوء الفهم.
ب. أخطاء وقت الترجمة مقابل أخطاء وقت التشغيل: عادةً ما يتم اكتشاف أخطاء المنشئ الافتراضي في وقت الترجمة. وهذا على النقيض من أخطاء وقت التشغيل، التي تحدث أثناء تنفيذ البرنامج.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3