سؤال

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. لقد شملت كل الملفات الصحيحة، لست متأكدا من هذا يعني ذلك؟

indexlist.h.
indexlist.cpp.

أيضا، باستخدام VS .NET 2003 - فهي ضمن "الملفات المصدر" و "ملفات الرأس" ومع ذلك، اخترت مع حذف Indexlish.h والخطأ لا يتغير؟

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

المحلول

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

على سبيل المثال، ما يلي المحتمل لديه خطأ في وقت الترجمة في ذلك إذا حاول الاتصال به:

template <typename T>
void doSomething(const T& x) {
    x->_this_function_does_not_exist_ever_();
}

ولكن طالما أنك لا تتصل doSomething لن تحصل على أخطاء.

المشكلة التي لديك هي أن ملف الرأس الخاص بك يخبر المحول البرمجي "مهلا، توجد هذه الوظائف"، ولكن عندما يحاول المحول البرمجي إنشاء أي تعريفات. (لا يمكنك "ترجمة" تعريفات في ملف مصدر وربطها في، يجب أن تكون مرئية للمتصل.)

الحل الأكثر شيوعا هو تحديد قالب الطبقة بأكمله في .h أو .hpp ملف.

نصائح أخرى

هل تستخدم Visual Studio ثم قم بتضمين كل من الملفات في الحل ثم تشغيل.

منذ أن تستخدم قوالب, ، أفضل طريقة لتضمين التعريف في ملف .h.

قرأت شيئا من هذا كتاب وبعد وهنا هو شيئا ما قد يساعدك أيضا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top