000
16.05.2011, 23:33 Uhr
Lensflare
|
Hallo.
Ich habe ein merkwürdiges Template Problem und hoffe ihr könnt mir helfen:
Der folgende Code wirft bei MS VisualStudio 9 und bei cygwin (g++) einen Compilerfehler.
A.h
C++: |
#ifndef LENSFLARE_A_H #define LENSFLARE_A_H
class A { public: template <typename T> void Test(const T& v); };
#endif //LENSFLARE_A_H
|
A.cpp
C++: |
#include "A.h"
template <typename T> void A::Test(const T& v) {
}
|
main.cpp
C++: |
#include <iostream> #include "A.h"
int main() { A a; a.Test(5);
std::cin.ignore(); return 0; }
|
Wenn ich die Funktion aber nicht in der cpp Datei, sondern in der h Datei, direkt unter der Klasse definiere, dann gibts keine Fehler:
A.h
C++: |
#ifndef LENSFLARE_A_H #define LENSFLARE_A_H
class A { public: template <typename T> void Test(const T& v); };
template <typename T> void A::Test(const T& v) {
}
#endif // LENSFLARE_A_H
|
Warum? Und wie kann ich die Template Funktion fehlerfrei in der cpp Datei definieren? -- Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten. (Emerson Pugh Trost) |