Pergunta

Estou recebendo erros do vinculador ao usar classes que fazem referência a outras classes nelas.

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)

É uma referência a esta classe:

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();

Nesta aula:

class Enemy{
    public:
    Enemy(int a, int b, MovePattern p,char c)
    x = b;
    y = a;

    MovePattern pattern (p);
    symbol = c;

Eles estão atualmente no mesmo arquivo .cpp e MovePattern está acima do Inimigo.

Não tenho certeza do que está acontecendo aqui

Visual C ++ 2010 Express com um projeto de console em branco, e eu não encontrei nada semelhante ao meu problema ainda, qualquer ajuda seria apreciada.

Foi útil?

Solução

Você não definiu o construtor padrão e o destruidor, conforme listado abaixo:

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

Você deve defini-los SE os declarar.A declaração deve ter definição.Do contrário, você obterá um erro de vinculador ao usá-los , implícita ou explicitamente.

Outras dicas

Este erro do vinculador ocorre porque você não compilou / vinculou o arquivo / código que contém as definições padrão do construtor (MovePattern::MovePattern()) e do destruidor (MovePattern::~MovePattern()).

Você deve declará-los inline dentro do class MovePattern (se você realmente não fizer muito nele):

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

Ou defina-os em um arquivo .cpp separado e compile / vincule esse arquivo à sua fonte:

// MovePattern.cpp
MovePattern::MovePattern ()
{
  //...
}
MovePattern::~MovePattern ()
{
  //...
}

Basta remover essas duas declarações:

MovePattern();
~MovePattern();

Obviamente, você não precisa deles - já que definiu tudo em um único arquivo cpp.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top