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


Anmelden zum Antworten