000
17.04.2005, 12:06 Uhr
Oliver
S2-Pixelgeneral
|
Hi,
ich hab ne Klass für Vectoren bzw. Arrays, die so aussieht:
C++: |
namespace ex { template <class T> class Vector { private: T * m_data; unsigned m_elements; public: Vector(); Vector(const unsigned elements); Vector(const Vector<T>& arr); ~Vector(); T& operator[](const unsigned i){return m_data[i];} const T& operator[](const unsigned i) const{return m_data[i];} const T* GetData() const { return m_data; } unsigned GetSize() const { return m_elements; } void Resize(const unsigned elements); void ForAll(void (*fp)(T& element)); }; };
|
So der Code befindet sich in einem Headerfile, der Ausschnitt ( Konstruktore und Destruktore lasse ich jetzt mal weg, die stehen da auch noch mit drinnen) befindet sich in einer normalen Quelldatei:
C++: |
#include "olib.h" // [...] template <class T> void ex::Vector<T>::Resize(const unsigned elements) { if(m_data) delete[]m_data; m_elements=elements; m_data=new T[elements]; }
template <class T> void ex::Vector<T>::ForAll(void (*fp)(T& element)) { for(unsigned i=0;i<m_elements;++i) fp(m_data[i]); }
|
Schließlich gibts noch ne main.cpp als Test:
C++: |
#include <iostream> #include "olib.h"
using namespace std;
int main() { ex::Vector<int> vec(4); vec.Resize(10); cin.get(); return 0; }
|
Das Problem ist, dass wenn ich das ganze linke, nicht aufgelöste Symbole für alle nicht-inline Funktionen kommen:
Fehler: |
[Linker error] undefined reference to `ex::Vector<int>::Vector(unsigned int)' [Linker error] undefined reference to `ex::Vector<int>::Resize(unsigned int)' usw.
|
Muss irgendwie an den Templates liegen (ich mach selten was mit denen), hab noch ne weitere Klasse ohne Templates in den gleichen Dateien und da gehts. Woran soll das liegen (MinGW)? -- Demokratie ist die Diktatur der Mehrheit.
www.siedler25.org/ ( Siedler2 - Remake ) |