linkerfehler "undefined reference to `vtable for ..."
-
Ich hab schon einige Zeit mit der Suche nach der Fehlerquelle verbracht, komme aber nicht darauf, was fehlt oder falsch ist.
Ich bekomme beim Linken meines miniprojektes immer folgende Fehlermeldungen:
parsertest.o(.text+0x2a): In function `main': /home/pumu/C++/pumu_utils/istream_parser.hpp:23: undefined reference to `pumu_utils::IstreamQuelle::~IstreamQuelle [in-charge]()' parsertest.o(.gnu.linkonce.t._ZN10pumu_utils13IstreamQuelleC1ERSi+0x16): In function `pumu_utils::IstreamQuelle::IstreamQuelle[in-charge](std::basic_istream<char, std::char_traits<char> >&)': /home/pumu/C++/pumu_utils/parsertest.cpp:32: undefined reference to `vtable for pumu_utils::IstreamQuelle'
Nach meinen Informationen liegt das normalerweise an nicht implementierten virtuellen Methoden. Ich hab aber alle Methoden der entsprechenden Klasse implementiert und den Destruktor der Basisklasse. Woran liegts dann?
Dazu gehören folgende Codeteile:
#include <iostream> #include "istream_parser.hpp" int main() { IstreamQuelle isq(cin); return 0; }
parser.hpp:
template <class ParseData> class ParseQuelle { public: virtual ParseData getnext() = 0; virtual bool eof() = 0; virtual ~ParseQuelle() = 0; }; //... template <class ParseData> ParseQuelle<ParseData>::~ParseQuelle() {};
istream_parser.hpp:
#include "parser.hpp" #include <string> #include <iostream> class IstreamQuelle : public ParseQuelle<std::string> { private: std::istream& _is; //No copy IstreamQuelle(IstreamQuelle& rhs); IstreamQuelle& operator= (IstreamQuelle& rhs); public: //Ctor, Dtor IstreamQuelle(std::istream& is) : _is(is) {}; virtual ~IstreamQuelle(); virtual std::string getnext(); virtual bool eof(); };
istream_parser.cpp:
#include "istream_parser.hpp" std::string IstreamQuelle::getnext() { std::string s = ""; _is >> s; return s; } bool IstreamQuelle::eof() { return (!_is.good()); } IstreamQuelle::~IstreamQuelle() {}
-
Welchen Compiler verwendest du? Weder VS 2005 Beta 1 noch Comeau Online spucken einen Fehler aus (außer dem Semikolon hinter der Destrukordefinition von ParseQuelle).
-
habs mit g++ ausprobiert funktioniert. mit
g++ main.cpp istream_parser.cppwenn ich
g++ main.cpp
aufrufe kommen die gleichen fehlermeldungen wie bei dir.das heisst du hast vergessen istream_parser.o dazu zu linken
Kurt
-
args, da war er. hatte das falsche target beim make editiert..
danke euch