Template: Undefined Reference
-
Hi everyone
Templates sind eine ewige Quelle interessanter Probleme, z.B. mit folgendem Code in meiner Oberklasse:
// DAO.h template<class T, class U> std::vector<boost::shared_ptr<T> > DAO::load() throw(DataAccessException) { try { dba::SQLIStream is = db->getIStream(); T type; is.open(type); return static_cast<U *>(this)->loadFromStream<T>(is); } catch(const dba::Exception &ex) { throw DataAccessException(ex); } }und dieser Implementierung in der Unterklassse:
// DataDAO.h template<class T> std::vector<boost::shared_ptr<T> > load() throw(DataAccessException) { return DAO::load<T, DataDAO>(); }führt der Aufruf von
dataDAO.load<Event>()zu einem undefined reference linker error.
/home/user/Software/c++/emc/core/libemc-core.so: undefined reference to `std::vector<boost::shared_ptr<com::emc::entity::data::Event>, std::allocator<boost::shared_ptr<com::emc::entity::data::Event> > > com::emc::persistence::DataDAO::load<com::emc::entity::data::Event>()Der Aufruf von
dataDAO.load<Event, DataDAO>klappt hingegen problemlos.
Wie kann bei diesem supersimplen Konstrukt eine undefined reference auftreten?
Danke für jede Antwort und greeetz
Kessi
-
du hast load als freie Funtion definiert, die Qualifikation fehlt (also DataDAO::load statt einfach nur load).
-
Argh! Wie bescheuert ist das denn
! Klarer Fall von vor lauter Bäumen den Wald nicht mehr sehen...Jedenfalls danke und Gruss
Kessi