Question

J'obtiens des erreurs de linker lorsque je utilise des classes qui font référence à d'autres classes.

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)

C'est de la référence à ce cours:

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

Dans cette classe:

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

    MovePattern pattern (p);
    symbol = c;

Ils sont actuellement dans le même fichier .cpp, et MovePattern est au-dessus de l'ennemi.

Je ne sais pas ce qui se passe ici

Visual C ++ 2010 Exprime avec un projet de console vide, et je n'ai pas encore trouvé de similaire à mon problème, toute aide serait appréciée.

Était-ce utile?

La solution

Vous n'avez pas défini le constructeur par défaut et le destructeur, comme indiqué ci-dessous:

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

Vous devez les définir si vous les déclarez. La déclaration doit avoir une définition. Ou bien vous obtiendrez une erreur de linker lorsque utilisant eux, implicitement ou explicitement.

Autres conseils

Cette erreur de linker est parce que vous n'avez pas compilé / lié le fichier / code qui contient le constructeur par défaut (MovePattern::MovePattern()) et destructeur (MovePattern::~MovePattern()) définitions.

Vous devriez soit les déclarer inline à l'intérieur de class MovePattern (Si vous n'y faites pas vraiment)::

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

Ou les définir dans un fichier .cpp séparé et compiler / lier ce fichier avec votre source:

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

Supprimez simplement ces deux déclarations:

MovePattern();
~MovePattern();

Vous n'en avez évidemment pas besoin - car vous avez tout défini dans un seul fichier CPP.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top