Source einbinden will nicht :(



  • Ersteinmal Hallo! Schönes Board!
    Zu meiner Frage:
    Ich habe folgende Dateien:
    classdef.h
    classdec.cpp
    testproject.cpp

    classdef.h:

    template <class T>
    class Test
    {
    public:
    	void SetData(T *theObject);
    	T *GetData();
    private:
    	T *myData;
    };
    

    classdec.cpp

    #include "classdef.h"
    
    template <class T>
    void Test<T>::SetData(T *theObject)
    {
    	myData=theObject;
    }
    
    template <class T>
    T *Test<T>::GetData()
    {
    	return myData;
    }
    

    testproject.cpp

    #include <iostream>
    #include <cstdlib>
    #include "classdef.h"
    using namespace std;
    class Data
    {
    public:
    	Data(int Var);
    	int getData();
    private:
    	int myData;
    };
    int main(int argc, char *argv[])
    {
    	Data *t=new Data(4);
    	Test<Data> Klasse;
    	Klasse.SetData(t);
    	cout <<Klasse.GetData();
    // 	cout << "Hello, world!" << endl;
    
      return EXIT_SUCCESS;
    }
    

    Wenn ich es jetzt make ausführe sagt er mir folgendes:
    (makefile mit automake erstellt durch kdevelop)

    make all-recursive
    make[1]: Gehe in Verzeichnis »/home/chriss/testproject«
    Making all in src
    make[2]: Gehe in Verzeichnis »/home/chriss/testproject/src«
    g++ -DHAVE_CONFIG_H -I. -I. -I.. -g -O2 -c testproject.cpp
    In Datei, eingefügt von testproject.cpp:9:
    classdef.h:9:3: Warnung: Kein Newline am Dateiende
    g++ -DHAVE_CONFIG_H -I. -I. -I.. -g -O2 -c classdek.cpp
    In Datei, eingefügt von classdek.cpp:1:
    classdef.h:9:3: Warnung: Kein Newline am Dateiende
    classdek.cpp:13:2: Warnung: Kein Newline am Dateiende
    /bin/sh ../libtool --mode=link g++ -g -O2 -o testproject testproject.o classdek.o
    mkdir .libs
    g++ -g -O2 -o testproject testproject.o classdek.o
    testproject.o: In function main': /home/chriss/testproject/src/testproject.cpp:21: undefined reference toData::Data(int)'
    /home/chriss/testproject/src/testproject.cpp:23: undefined reference to Test<Data>::SetData(Data*)' /home/chriss/testproject/src/testproject.cpp:24: undefined reference toTest<Data>::GetData()'
    collect2: ld returned 1 exit status
    make[2]: *** [testproject] Fehler 1
    make[2]: Verlasse Verzeichnis »/home/chriss/testproject/src«
    make[1]: *** [all-recursive] Fehler 1
    make[1]: Verlasse Verzeichnis »/home/cmake all-recursive
    make[1]: Gehe in Verzeichnis »/home/chriss/testproject«
    Making all in src
    make[2]: Gehe in Verzeichnis »/home/chriss/testproject/src«
    g++ -DHAVE_CONFIG_H -I. -I. -I.. -g -O2 -c testproject.cpp
    In Datei, eingefügt von testproject.cpp:9:
    classdef.h:9:3: Warnung: Kein Newline am Dateiende
    g++ -DHAVE_CONFIG_H -I. -I. -I.. -g -O2 -c classdek.cpp
    In Datei, eingefügt von classdek.cpp:1:
    classdef.h:9:3: Warnung: Kein Newline am Dateiende
    classdek.cpp:13:2: Warnung: Kein Newline am Dateiende
    /bin/sh ../libtool --mode=link g++ -g -O2 -o testproject testproject.o classdek.o
    mkdir .libs
    g++ -g -O2 -o testproject testproject.o classdek.o
    testproject.o: In function main': /home/chriss/testproject/src/testproject.cpp:21: undefined reference toData::Data(int)'
    /home/chriss/testproject/src/testproject.cpp:23: undefined reference to Test<Data>::SetData(Data*)' /home/chriss/testproject/src/testproject.cpp:24: undefined reference toTest<Data>::GetData()'
    collect2: ld returned 1 exit status
    make[2]: *** [testproject] Fehler 1
    make[2]: Verlasse Verzeichnis »/home/chriss/testproject/src«
    make[1]: *** [all-recursive] Fehler 1
    make[1]: Verlasse Verzeichnis »/home/chriss/testproject«
    make: *** [all-recursive-am] Fehler 2
    hriss/testproject«
    make: *** [all-recursive-am] Fehler 2

    Stören tut mich das undefined reference. Dies ist zwar nicht mein Originalprojekt aber vom Prinzip her ist es das was ich nicht hinbekomme. Sources korrekt einbinden.

    Danke für die Hilfe



  • http://www.c-plusplus.net/forum/viewtopic-var-t-is-39467.html
    Bitte zu erst suchen, dieses Problem ist wirklich sehr geläufig.

    Außerdem existiert keine Implementierung für Data::Data (int).



  • Also erstmal entschuldigung! Habe gesucht aber wirklich nichts gefunden. Suchanfrage:
    Source einbinden
    templates einbinden
    hatte nichts gebracht deshalb meine Frage. Nochmals entschuldigung. Und Respekt für die schnelle antwortzeit auf diesem Board.


Anmelden zum Antworten