C++ error LNK2019 mit Konstruktoren und Destruktoren in abgeleiteten Klassen
Ich habe zwei Klassen, eine geerbt von den anderen. Wenn ich kompilieren möchte, bekomme ich folgenden Fehler:
Einheit.obj : error LNK2019: nicht aufgelöstes externes symbol "public: __thiscall Utility::Parsables::Base::Base(void)" (??0Base@Parsables@Dienstprogramm@@QAE@XZ) referenced in function "public: __thiscall Utility::Parsables::Person::Person(void)" (??0Entity@Parsables@Dienstprogramm@@QAE@XZ)
Einheit.obj : error LNK2019: nicht aufgelöstes externes symbol "public: virtual __thiscall Utility::Parsables::Base::~Base(void)" (??1Base@Parsables@Dienstprogramm@@UAE@XZ) referenced in function "public: virtual __thiscall Utility::Parsables::Person::~Person(void)" (??1Entity@Parsables@Dienstprogramm@@UAE@XZ)
D:\Programming\Projects\Caffeine\Debug\Caffeine.exe : fatal error LNK1120: 2 nicht aufgelöste externe Verweise
Ich kann wirklich nicht herausfinden, was Los ist.. kann jemand sehen, was ich falsch mache? Ich verwende Visual C++ Express 2008. Hier sind die Dateien..
"include/Extras/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/Extras/Parsables/Person.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 )
{
}
}
}
- Sind alle diese Dateien in das Projekt einbezogen? Siehst du Sie kompilieren?
- Ja, Sie sind alle enthalten, und kompilieren Sie in Ordnung.
- versuchen Sie, loszuwerden, das namespaces
- Nur ein c & p eine Antwort, die ich gepostet etwas weiter unten: "ich habe gerade überprüft und erinnerte mich an etwas, ich habe zwei Dateien, die beide mit dem Namen Base.cpp sind Sie aber in verschiedenen Verzeichnissen. Ich sehe ein kompilieren, aber nicht zwei. Könnte das das problem sein?"
- Sicher. Erste, was zu tun ist, um sicher zu sein, was Sie verlinken. Benennen Sie jede verdächtige Datei, und überprüfen Sie das Ergebnis.
- Yep behoben, danke.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das entsprechende bit ist das:
Müssen Sie eine definition für
Base::Base
undBase::~Base
. Eine Deklaration ist nicht gut genug. Auch wenn Sie nichts zu tun haben, entweder in-Funktion, müssen Sie einen leeren Funktionsrumpf, weil C++ tatsächlich erfordert die Funktion zu existieren. C++ stellt die Dinge wie virtuellen Tisch Pflege innerhalb Ihrer Konstruktoren und Destruktoren, so dass Sie definiert werden müssen, auch wenn Sie nicht brauchen, etwas zu tun -- es C++ zu tun hat, die Dinge in dort.Sind Sie sicher, dass Base.cpp wird im build enthalten?
Nur auf dieses genaue die gleichen Fehler, die heute in Visual Studio 2015. Leider akzeptiert die Antwort nicht funktionierte (wie auch Antworten aus vielen gleichen Fragen). Die Sache, die für mich gearbeitet wurde, klicken Sie rechts auf die base-Klasse cpp-Datei, schließen Sie und dann schließen Sie es wieder. Ich glaube irgendwie VS verwirrt während der Bewegung-Datei um und benennt es nur stillschweigend abgelehnt um es zu kompilieren, obwohl es war markiert als "Im Projekt" = true im property-editor als auch aufgeführt in der vcproj-Datei in der Gruppe. Das ist ja schrecklich Fehler und landeten eine gute Stunde auf Sie.
Entweder Ihre base.cpp wird nicht kompiliert/gelinkt oder Sie haben ein Rechtschreibfehler im es