7

私には2つのクラスがあり、一方は他方から継承されています。コンパイルすると、次のエラーが発生します。

Entity.obj:エラーLNK2019:未解決の外部シンボル "public:__thiscall Utility :: Parsables :: Base :: Base(void)"(?? 0Base @ Parsables @ Utility @@ QAE @ XZ)関数 "public:__ thiscall Utility :: Parsables :: Entity :: Entity(void) "(?? 0Entity @ Parsables @ Utility @@ QAE @ XZ)

Entity.obj:エラーLNK2019:未解決の外部シンボル "public:virtual __thiscall Utility :: Parsables :: Base ::〜Base(void)"(?? 1Base @ Parsables @ Utility @@ UAE @ XZ)関数 "public: virtual __thiscall Utility :: Parsables :: Entity ::〜Entity(void) "(?? 1Entity @ Parsables @ Utility @@ UAE @ XZ)

D:\ Programming \ Projects \ Cafeine \ Debug \ Caffeine.exe:致命的なエラーLNK1120:2つの未解決の外部

私は本当に何が起こっているのか理解できません..誰かが私が間違っていることを見ることができますか?Visual C ++Express2008を使用しています。ファイルは次のとおりです。

"include / Utility / 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 / Utility / Parsables / Base.cpp"

#include "Utility/Parsables/Base.hpp"

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

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

"include / Utility / 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 / Utility / Parsables / Entity.cpp"

#include "Utility/Parsables/Entity.hpp"

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

  Entity::~Entity( void )
  {
  }
 }
}
4

3 に答える 3

9

関連するビットはこれです:

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

との定義を提供する必要がありBase::BaseますBase::~Base。宣言は十分ではありません。どちらの関数にも関係がない場合でも、C ++では実際に関数が存在する必要があるため、関数本体を空のままにしておく必要があります。C ++は、コンストラクタとデストラクタ内に仮想テーブルメンテナンスなどを配置するため、そこで何もする必要がない場合でも、仮想テーブルのメンテナンスを定義する必要があります。C++はそこで何かを行う必要があります。

Base.cppがビルドに含まれていることを確認しますか?

于 2010-05-01T14:02:02.210 に答える
1

今日、Visual Studio 2015でこれとまったく同じエラーが発生しました。残念ながら、受け入れられた回答は機能しませんでした(多くの同じ質問からの回答も同様です)。私のために働いたのは、基本クラスのcppファイルを右クリックし、除外してから再度含めることでした。どういうわけか、VSはファイルの移動や名前の変更中に混乱し、プロパティエディタで「プロジェクトに含まれる」= trueとマークされ、グループのvcprojファイルにリストされていても、コンパイルを黙って拒否したと思います。これは恐ろしいエラーであり、それにかなりの時間を費やすことになりました。

于 2016-10-11T09:55:47.620 に答える
0

base.cppがコンパイル/リンクされていないか、スペルミスがあります

于 2010-05-01T14:07:15.080 に答える