Ich habe viele Antworten gesucht, aber keiner von ihnen kann mein Problem lösen, ich bin neu in C++, dieses Problem ist ziemlich mit mir verdrahtet. Unten ist eine vereinfachte Extraktion meines Codes.C++ undefined Verweis auf Vtable Ausnahme
TestHeader.h:
#ifndef NAMESPACE_TESTHEADER_H_
#define NAMESPACE_TESTHEADER__H_
namespace Namespace {
class TestHeader {
public:
TestHeader(const std::string& str) : anyString_(str) { }
virtual std::string methodOne(const std::string& param) const;
virtual ~TestHeader() { anyString_.clear(); }
protected:
std::string anyString_;
};
}
#endif //NAMESPACE_TESTHEADER__H_
TestHeader.cpp:
#include "TestHeader.h"
using namespace std;
namespace Namespace {
TestHeader::TestHeader(const std::string& str):anyString_(str) { <do something>; }
std::string TestHeader::methodOne(const std::string& param) const
{
return <A string>;
}
TestHeader::~TestHeader() {
anyString_.clear();
}
}
Was habe ich einfach diese Zeile in einem anderen CPP in meinem Paket rufen wurde:
#include "TestHeader.h"
TestHeader testHeader("whatever");
Der Build ist fehlgeschlagen, indem
geworfen wurdeDas Seltsame ist: wenn ich virtual std::string methodOne(const std::string& str) const;
in Header und dessenderen Umsetzung in CPP-Kommentar aus, OR, wenn ich : anyString_(str)
nach Konstruktor kommentieren und anyString_.clear();
in destructor zusammen nur in Header, wird die Build erfolgreich zu sein.
verwendet wird, verweigert. Warum haben Sie den Konstruktor und Destruktor zweimal definiert? Es sollte nicht kompiliert werden, was mich denken lässt, dass Sie Ihre Quellen nicht korrekt kompiliert und verlinkt haben. – Curious
Ich denke, es wird keine Neudefinition von Konstruktor und Destruktor kompilieren. – user1438832
Sie enthalten 'std :: string' nicht in Ihrer Kopfzeile. Es gibt keine Möglichkeit, dass der Fehler nur bei der Verknüpfung auftritt. Veröffentlichen Sie eine richtige [mcve], keine verdummte Version, die nichts reproduziert. – StoryTeller