Question

J'ai deux classes, l'une héritée de l'autre. Quand je compile, je reçois les erreurs suivantes:

  

Entity.obj: erreur LNK2019: symbole externe non résolu "public: __thiscall Utility :: Parsables :: Base :: Base (void)" (?? 0Base @ @ Parsables Utility @@ QAE @ XZ) référencé dans la fonction « publique : __thiscall Utilitaire :: Parsables :: Entité :: Entité (void) »(?? 0Entity @ @ Parsables Utility @@ QAE @ XZ)

     

Entity.obj: erreur LNK2019: symbole externe non résolu "public: __thiscall virtuel Utilitaire :: Parsables :: Base :: ~ Base (void)" (?? 1Base @ @ Parsables Utility @@ EAU @ XZ) référencé dans la fonction "public: __thiscall virtuel Utilitaire :: Parsables :: Entité :: ~ Entité (void)" (?? 1Entity @ @ Parsables Utility @@ EAU @ XZ)

     

D: \ Programmation \ Projects de la caféine \ Debug \ Caffeine.exe: LNK1120 d'erreur fatale: 2 unresolved externals

Je ne peux pas comprendre ce qui se passe .. Quelqu'un peut-il voir ce que je fais mal? J'utilise Visual C ++ express 2008. Voici les fichiers ..

"include / Utilitaire / Parsables / Base.hpp"

#ifndef CAFFEINE_UTILITY_PARSABLES_BASE_HPP
#define CAFFEINE_UTILITY_PARSABLES_BASE_HPP

namespace Utility
{
 namespace Parsables
 {
  class Base
  {
  public:
   Base( void );
   virtual ~Base( void );
  };
 }
}

#endif //CAFFEINE_UTILITY_PARSABLES_BASE_HPP

"src / Utilitaire / Parsables / Base.cpp"

#include "Utility/Parsables/Base.hpp"

namespace Utility
{
 namespace Parsables
 {
  Base::Base( void )
  {
  }

  Base::~Base( void )
  {
  }
 }
}

"include / Utilitaire / Parsables / Entity.hpp"

#ifndef CAFFEINE_UTILITY_PARSABLES_ENTITY_HPP
#define CAFFEINE_UTILITY_PARSABLES_ENTITY_HPP

#include "Utility/Parsables/Base.hpp"

namespace Utility
{
 namespace Parsables
 {
  class Entity : public Base
  {
  public:
   Entity( void );
   virtual ~Entity( void );
  };
 }
}

#endif //CAFFEINE_UTILITY_PARSABLES_ENTITY_HPP

"src / Utilitaire / Parsables / Entity.cpp"

#include "Utility/Parsables/Entity.hpp"

namespace Utility
{
 namespace Parsables
 {
  Entity::Entity( void )
  {
  }

  Entity::~Entity( void )
  {
  }
 }
}
Était-ce utile?

La solution

Le bit correspondant est le suivant:

unresolved external symbol "public: __thiscall Utility::Parsables::Base::Base(void)"

Vous devez fournir une définition pour Base::Base et Base::~Base. Une déclaration est pas assez bon. Même si vous avez rien à faire dans les deux fonctions, vous devez laisser un corps de la fonction vide, parce que C ++ exige en fait la fonction d'exister. C ++ met les choses comme l'entretien de la table virtuelle à l'intérieur de vos constructeurs et destructeurs, ils doivent donc être définis, même si vous n'avez pas besoin de faire quoi que ce soit là -. C ++ doit faire des choses là-dedans

Êtes-vous sûr Base.cpp est inclus dans la construction?

Autres conseils

Juste rencontré cette même erreur aujourd'hui exacte dans Visual Studio 2015. Malheureusement, la réponse acceptée n'a pas travaillé (ainsi que les réponses de nombreux mêmes questions). Ce qui a fonctionné pour moi était un clic droit sur le fichier de classe de base cpp, exclure et inclure à nouveau. Je pense que d'une certaine manière VS est embrouillé tout fichier se déplacer et renomme et silencieusement refusé de le compiler, même si elle a été marquée comme « Inclus dans le projet » = true dans l'éditeur de la propriété ainsi que la liste dans le fichier vcproj dans le groupe. Cette erreur est horrible et a fini par passer une bonne heure là-dessus.

Soit votre base.cpp n'est pas compilé / lié ou vous avez mal orthographié dans ce

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