سؤال

أتلقى أخطاء في الرابط عند استخدام الفئات التي تشير إلى فئات أخرى فيها.

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 واحد.

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