Pregunta

Recibo errores de creación de enlaces cuando uso clases que hacen referencia a otras clases en ellas.

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)

Es de hacer referencia a esta clase:

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

En esta clase:

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

    MovePattern pattern (p);
    symbol = c;

Actualmente están dentro del mismo archivo .cpp y MovePattern está por encima de Enemy.

No estoy seguro de lo que está pasando aquí

Visual C ++ 2010 Express con un proyecto de consola en blanco, y aún no he encontrado nada similar a mi problema, se agradecería cualquier ayuda.

¿Fue útil?

Solución

No ha definido el constructor y el destructor predeterminados, como se indica a continuación:

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

Tienes que definirlos SI los declaras.La declaración debe tener una definición.De lo contrario, obtendrá un error del vinculador cuando los use , ya sea implícita o explícitamente.

Otros consejos

Este error del vinculador se debe a que no ha compilado / vinculado el archivo / código que contiene las definiciones predeterminadas de constructor (MovePattern::MovePattern()) y destructor (MovePattern::~MovePattern()).

Deberías declararlos inline dentro del class MovePattern (si realmente no haces mucho en él):

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

O defínalos en un archivo .cpp separado y compile / vincule ese archivo con su fuente:

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

Simplemente elimine estas dos declaraciones:

MovePattern();
~MovePattern();

Obviamente, no los necesita, ya que definió todo en un solo archivo cpp.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top