12. november 2004 - 10:48
Der er
8 kommentarer og 1 løsning
Templates og C++
Hi, jeg har en klasse ... --------------------- template <typename T> class Test { private: // variabler og funktioner public: int testing (int i); }; // og her kommer problemet int Test::testing (int i) { return i; } int main () { // C++-Code } -------------------- hvordan kan jeg lave en klasse-metode (funktion), som bliver defineret uden for klassen selv - hvis klassen gør brug af templates??? med venlig hilsen KernelX
Annonceindlæg fra COMM2IG
12. november 2004 - 11:12
#1
Du mangler template argumentet til den. int Test::testing<int> (int i) { return i; } hvis din instance var af typen int, eller <> hvis du ikke bruger den her (tror jeg nok).
12. november 2004 - 11:22
#2
Mit forslag: template <typename T> int Test<T>::testing (int i) { return i; }
12. november 2004 - 11:25
#3
Lidt tilrettet komplet eksempel: #include <iostream> using namespace std; template <typename T> class Test { private: T v; public: Test(T v) { this->v = v; }; T testing (int i); }; template <typename T> T Test<T>::testing(int i) { return i*v; } int main () { Test<int> t1(123); cout << t1.testing(2) << endl;; Test<double> t2(123.456); cout << t2.testing(2) << endl;; return 0; }
12. november 2004 - 11:27
#4
#include <iostream> using namespace std; template <typename T> class Test { private: // variabler og funktioner public: int testing (int i); }; // og her kommer problemet int Test<int>::testing (int i) { return i; } int main () { Test<int> x; cout << x.testing (6) << "\n"; } det virker nu ... er reglen så, at det altid skal være return-typen, som skal stå i de spidse paranteser? Hvis jeg lod de spidse paranteser være tom, virkede det ikke ...
12. november 2004 - 11:34
#5
Nej det er den type der svarer til T i class. Og med det approach skal du selv skrive en metode for hver ttype du vil bruge. Det er derfor at jeg også vil template den, foprdi så skal du kun skrive den en gang !
12. november 2004 - 11:40
#6
altså min klasse skal jo få T som typename ... men metoden ... skal aflevere en int-value uafhængig af, hvad jeg senere i main har sat T til at være. hvis jeg i main siger Test<bool> x; så skal metoden alligevel aflevere en int-value ...
12. november 2004 - 11:45
#7
ahhhh .... nu fik jeg den!!! template <typename T> class Test { public: int testing (void); }; template <typename T> int testing<T> (void) { /* nu kan jeg returne med int og kan alligevel bruge T */ } mange tak!!! husk at skrive ting som svar ... pga. points
12. november 2004 - 12:01
#8
svar
12. november 2004 - 12:02
#9
Kan template <typename T> int testing<T> (void) { ikke være template <typename T> int testing (void) { ?
Kurser inden for grundlæggende programmering