كيو تي الخالق:"تم استخدام الدالة المضمنة ولكن لم يتم تحديدها مطلقًا" - لماذا؟
-
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()
{ ... }