ربط خطأ في C ++ - تنفيذ قائمة الفهرسة
سؤال
Linking...
Directory.obj : error LNK2019: unresolved external symbol "public: void __thiscall indexList<class entry,100>::read(class std::basic_istream<char,struct std::char_traits<char> > &)" (?read@?$indexList@Ventry@@$0GE@@@QAEXAAV?$basic_istream@DU?$char_traits@D@std@@@std@@@Z) referenced in function _main
الحصول على هذا الخطأ وغيرها المرتبط بتنفيذ Indexlist. لقد شملت كل الملفات الصحيحة، لست متأكدا من هذا يعني ذلك؟
أيضا، باستخدام VS .NET 2003 - فهي ضمن "الملفات المصدر" و "ملفات الرأس" ومع ذلك، اخترت مع حذف Indexlish.h والخطأ لا يتغير؟
المحلول
ما لديك هو قالب فئة. هذا يعني عندما يحتاج المحول البرمجي إلى الاتصال بدالة، وسوف ينظر إلى تعريف القالب الخاص بك وإنشاء الرمز المقابل حسب الحاجة.
على سبيل المثال، ما يلي المحتمل لديه خطأ في وقت الترجمة في ذلك إذا حاول الاتصال به:
template <typename T>
void doSomething(const T& x) {
x->_this_function_does_not_exist_ever_();
}
ولكن طالما أنك لا تتصل doSomething
لن تحصل على أخطاء.
المشكلة التي لديك هي أن ملف الرأس الخاص بك يخبر المحول البرمجي "مهلا، توجد هذه الوظائف"، ولكن عندما يحاول المحول البرمجي إنشاء أي تعريفات. (لا يمكنك "ترجمة" تعريفات في ملف مصدر وربطها في، يجب أن تكون مرئية للمتصل.)
الحل الأكثر شيوعا هو تحديد قالب الطبقة بأكمله في .h
أو .hpp
ملف.