LNK2019 استخدام الفئات غير المُصممة
سؤال
أتلقى أخطاء في الرابط عند استخدام الفئات التي تشير إلى فئات أخرى فيها.
1>main.obj : error LNK2019: unresolved external symbol "public: __thiscall MovePattern::~MovePattern(void)" (??1MovePattern@@QAE@XZ) referenced in function "public: __thiscall Enemy::Enemy(int,int,class MovePattern,char)" (??0Enemy@@QAE@HHVMovePattern@@D@Z)
1>main.obj : error LNK2019: unresolved external symbol "public: __thiscall MovePattern::MovePattern(void)" (??0MovePattern@@QAE@XZ) referenced in function "public: __thiscall Enemy::Enemy(int,int,class MovePattern,char)" (??0Enemy@@QAE@HHVMovePattern@@D@Z)
إنه من الرجوع إلى هذا الفصل:
class MovePattern{
public:
char next;
MovePattern();
MovePattern(const MovePattern &old){
p = old.p;
pi = 0;
next = p[0];
n = p[0];
}
MovePattern(char *pattern){
p = pattern;
pi = 0;
next = p[0];
n = p[0];
}
~MovePattern();
في هذا الصف:
class Enemy{
public:
Enemy(int a, int b, MovePattern p,char c)
x = b;
y = a;
MovePattern pattern (p);
symbol = c;
وهي موجودة حاليًا داخل نفس الملف .cpp، ويوجد MovePattern فوق Enemy.
لست متأكدا مما يحدث هنا
Visual C++ 2010 Express مع مشروع وحدة تحكم فارغ، ولم أجد أي شيء مشابه لمشكلتي حتى الآن، سيكون موضع تقدير أي مساعدة.
المحلول
لم تحدد المُنشئ الافتراضي والمدمر ، كما هو موضح أدناه: Genacodicetagpre
يتعين عليك تحديدها إذا قمت بتصريحها.يجب أن يكون للإعلان تعريف.وإلا ستحصل على خطأ رابط عند استخدامها ، سواء بشكل ضمني أو صريح.
نصائح أخرى
يرجع خطأ الرابط هذا إلى أنك لم تقم بتجميع/ربط الملف/الكود الذي يحتوي على المُنشئ الافتراضي (MovePattern::MovePattern()
) والمدمر (MovePattern::~MovePattern()
) تعريفات.
يجب عليك إما أن تعلن لهم inline
داخل class MovePattern
(إذا كنت لا تفعل الكثير في ذلك حقًا):
class MovePattern {
public:
MovePattern () {}
~MovePattern () {}
};
أو قم بتعريفها في ملف .cpp منفصل وقم بتجميع/ربط هذا الملف بالمصدر الخاص بك:
// MovePattern.cpp
MovePattern::MovePattern ()
{
//...
}
MovePattern::~MovePattern ()
{
//...
}
فقط قم بإزالة هذين الإعلانين: Genacodicetagpre
من الواضح أنك لست بحاجة إلى هذه - لأنك حددت كل شيء في ملف cpp واحد.