كيو تي الخالق:"تم استخدام الدالة المضمنة ولكن لم يتم تحديدها مطلقًا" - لماذا؟

StackOverflow https://stackoverflow.com/questions/1421666

  •  07-07-2019
  •  | 
  •  

سؤال

لماذا أتلقى هذا التحذير في Qt Creator:`` الدالة المضمنة 'bool Lion::growl ()' مستخدمة ولكن لم يتم تعريفها مطلقًا؟

لقد قمت بالتحقق مرة أخرى من الكود الخاص بي، ولدي إعلان

inline bool growl () في Lion (lion.h)

والتنفيذ المقابل في lion.cpp:

inline bool Lion::growl ()

ماذا يحدث هنا؟

يحرر:لقد كان افتراضي أنه من القانوني تحديد الطريقة المضمنة الفعلية في ملف .cpp (ملف inline الكلمة الأساسية تنبه المترجم للبحث عن نص الطريقة في مكان آخر)، أم أنني مخطئ؟

لا أريد أن أتسبب في فوضى ملفات الرأس الخاصة بي بتفاصيل التنفيذ.

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

المحلول

حسنًا، لا أعرف بالضبط المشكلة، ولكن كبداية:

  • من المفترض أن يتم تنفيذ الأساليب المضمنة في ملف الرأس.يحتاج المترجم إلى معرفة الكود فعليًا في النسق هو - هي.
  • كما أن استخدام الكلمة الأساسية "المضمنة" في إعلان الفصل ليس له أي تأثير.لكنها لا يمكن أن تؤذي أيضا.

أنظر أيضا: الأسئلة الشائعة لـ C++ Lite

نصائح أخرى

<اقتباس فقرة>   من المفترض أن يتم تنفيذها في ملف الرأس

وأساليب المضمنة. ال   يحتاج المترجم إلى معرفة رمز لمضمنة فعلا.

وإلا إذا تم استخدام دالة مضمنة في نفس المشروع، ربما في ملف آخر <م> # تشمل رأس لها.

وافتقد وجود مثل هذا التقييد للمكتبات لتقييد رؤوس للعمل نماذج تجعل الأمور أكثر قابلية للقراءة.

وماذا عن # تشمل -ing و.CPP؟

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

class someClass
{
void someFunc()
{ ... }
}
// This will make the function inline even w/o the explicit 'inline'

وليس من النموذج

class someClass
{
public:
     void someFunc();
}

void someClass::someFunc()
{ ... }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top