Anzeige:
Ergebnis 1 bis 4 von 4

Thema: std::vector mit Template

  1. #1
    Registrierter Benutzer
    Registriert seit
    16.09.2005
    Beiträge
    48

    Question std::vector mit Template

    Hallo,
    nach langer Abwesenheit habe ich mal wieder eine Frage zu einem Problem bei dem ich nicht weiterkomme. Ob der zusammengekürzte Quellcode so sinnvoll ist glaube ich nicht, aber es geht mir eher darum, wie ich in dem Fall ein std::vector mit Template benutzen kann.

    Der folgende Quellcode gibt die folgende Fehlermeldung beim Linken:

    In function `Datasets::iterator()': undefined reference to `Iterator<Data>::Iterator(std::vector<Data, std::allocator<Data> >&)'.

    Code:
    template<class T>
    class Iterator {
       public:
          Iterator<T>( std::vector<T>& data );
    
       private:
          std::vector<T>& _data;
    };
    
    template<class T>
    Iterator<T>::Iterator( std::vector<T>& data )
       : _data( data ) {
    }
    
    // _datasets = std::vector<Data>
    std::auto_ptr< Iterator<Data> > Datasets::iterator() {
       return std::auto_ptr< Iterator<Data> >( new Iterator<Data>( _datasets ) );
    }
    Ich hoffe es kann jemand damit etwas anfangen und mir bei meinem Problem weiterhelfen ...

    MfG =>dnb<=

  2. #2
    Registrierter Benutzer Avatar von BLUESCREEN3D
    Registriert seit
    08.11.2002
    Beiträge
    665
    Code:
    Iterator<T>( std::vector<T>& data );
    Hier kannst du das erste <T> weglassen.

    Eig. müsste es funktionieren - wie kompilierst du das denn (und was liegt in welcher Datei)?

  3. #3
    Registrierter Benutzer
    Registriert seit
    16.09.2005
    Beiträge
    48
    Stimmt, das erste <T> hatte ich auch weggelassen, ist aber irgendwie reingerutscht.
    Die Iterator-Klassendefinierung liegt in Iterator.hpp, die Iterator-Implementierung in Iterator.cpp, der Konstruktor-Aufruf z.B. in der main.

    Bin dem Problem auch etwas näher gekommen. Wenn ich den c'tor in der Headerdatei implementiere geht es...
    Eine Lösung ist es, aber wodurch wird der Fehler genau verursacht? An einer fehlenden Iterator-Objektdatei liegt es nicht, die wird mitgelinkt.
    Code:
    template<class T>
    class Iterator {
       public:
          Iterator( std::vector<T>& data )
             : _data( data ) {}
       private:
          std::vector<T>& _data;
    };

  4. #4
    Registrierter Benutzer Avatar von Fabeltier
    Registriert seit
    02.10.2006
    Beiträge
    51
    Hallo,

    Hast Du also Header und Implementationsdatei getrennt? Afaik geht das immer noch nicht in C++ wenn Du Templates verwenden willst!
    http://www.c-plusplus.de/forum/viewt...-is-39467.html

    Ansonsten zwei Anmerkungen, ist die Referenz hier gewollt?
    Code:
    std::vector<T>& _data;
    ...und dann erinnere mich noch an eine Sache keine Smartpointer zusammen mit STL Containern zu verwenden. Bzw diese nicht den Smartpointern als Template Type zu uebergeben.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •