LNK2019 Использование необработанных классов - PullRequest
0 голосов
/ 16 июня 2011

Я получаю ошибки компоновщика при использовании классов, которые ссылаются на другие классы в них.

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 находится выше врага.

Я не уверен, что здесь происходит

Visual C ++ 2010 Express спустой консольный проект, и я еще не нашел ничего похожего на мою проблему, любая помощь будет признательна.

Ответы [ 3 ]

2 голосов
/ 16 июня 2011

Эта ошибка компоновщика связана с тем, что вы не скомпилировали / не связали файл / код, содержащий определения конструктора по умолчанию (MovePattern::MovePattern()) и определения деструктора (MovePattern::~MovePattern()).

Вы должны либо объявить их inline внутри class MovePattern (если вы на самом деле ничего не делаете в этом):

class MovePattern {
public:
  MovePattern () {}
  ~MovePattern () {}
};

Или определите их в отдельном файле .cpp и скомпилируйте / свяжите этот файл с вашим источником:

// MovePattern.cpp
MovePattern::MovePattern ()
{
  //...
}
MovePattern::~MovePattern ()
{
  //...
}
2 голосов
/ 16 июня 2011

Вы не определили конструктор по умолчанию и деструктор, как указано ниже:

MovePattern();  //default constructor
~MovePattern(); //destructor

Вы должны определить их, если вы объявите их. Декларация должна иметь определение. В противном случае вы получите ошибку компоновщика при использовании их, неявно или явно.

1 голос
/ 16 июня 2011

Просто удалите эти два объявления:

MovePattern();
~MovePattern();

Вы, очевидно, не нуждаетесь в них - поскольку вы определили все в одном файле cpp.

...