Templateproblem
-
t ist doch das, was ich übergebe oder? In diesem fall einmal string und einmal int. Und der int soll zurückgegeben werden.
-
kamelkacke schrieb:
t ist doch das, was ich übergebe oder? In diesem fall einmal string und einmal int. Und der int soll zurückgegeben werden.
t ist ein Typ. Der kann nicht sowohl int als auch string sein.
Templates werden zur Kompilierzeit aufgelöst, d.h. anstelle von "t" wird der Typ der jeweiligen Instanziierung eingesetzt.
-
template <typename T, typename T2> T2 rechner (T const& test1, T2 test2) { return test2 += test1.size(); }Halbwegs richtig.
-
Achso! Gibts denn sowas wie <class t, class x> ?
-
kamelkacke schrieb:
Achso! Gibts denn sowas wie <class t, class x> ?
Ja, natürlich.
typenameundclasssind in diesem Fall identisch.
-
Und auf dem weg gehts nicht?
Die Fehlermeldung sagt cant convert x to x. Also braucht man nen übeadungskonstruktor?#include <iostream> #include <string> using namespace std; template <class t, class t2> t rechner (t test1, t2 test2) { for (typename t :: iterator i=test1.begin (); i!=test1.end (); i++) { test2++; } return test2; } int main () { string bs = "Hallo"; int anzahl = 0; int out = rechner (bs, anzahl); cout << out; }
-
kamelkacke schrieb:
Und auf dem weg gehts nicht?
Die Fehlermeldung sagt cant convert x to x. Also braucht man nen übeadungskonstruktor?...nein.
Du gibst test2 zurück. Welcher Typ ist das? Und welcher Typ wird von deiner Funktion zurückgegeben?
Templates sind definitiv noch zu hoch für dich.
Schreib erstaml eine Funktion nur für std::string.
-
Pfff zeile 7 int statt t. Ansonsten ist alles richtig!!!! Danke leute
-
kamelkacke schrieb:
Pfff zeile 7 int statt t. Ansonsten ist alles richtig!!!! Danke leute
Nein, ist es nicht.
Was ist, wenn t2 nicht kompatibel ist mit int?
Und wieso muss die anzahl als Parameter übergeben werden, obwohl der Parameter gar nicht verwendet wird?
Schreib es erstmal nur für std::string.
-
Der letzte Code erinnert mich irgendwie an so schöne Funktionen in der Art:
void foo(int i) { for (i = 0; i < 5; ++i) cout << "Bar!"; }Schon öfters so gesehen.
Vielleicht lernt der Threadersteller aus diesem Beispiel sogar, was bei ihm falsch läuft.