Template-Funktion, Daten aus array a in array b kopieren
-
Hallo,
ich habe hier folgendes Beispiel-Programm, was die Daten aus array a in array b kopiert.
D.h. als Ausgabe erhält man dann hallo hallo.#include <iostream> using namespace std; int main (void) { char a[10] = "hallo"; char b[10] = "du"; cout << a << endl << b << endl; strcpy(b,a); cout << a << endl << b << endl; return 0; }
Nun meine Frage: Wie kann ich dieses mit einer Template-Funktion realisieren?
template <Class T>
....Danke
M_arcus
-
wie meinst du das als Template Funktion?
Schau dir mal std::copy aus algorithm an
-
template<typename T> void copy(T* trg, T const* src, size_t len) { while(len--) { *trg++;=*src++; } } //und dann copy(b,a,10);
Ist natürlich blödsinn, weil es std::copy in der C++ Standard Library gibt, aber zur Übung ist diese Lösung OK.
-
Hallo!
Danke für die schnellen Antworten.
Habe es jetzt so mal ausprobiert, aber habe dann noch folgende Fehlermeldung:"error C2100: Zeigeroperation ungueltig
J:\C++\1.cpp(35) : Siehe Verweis auf Instantiierung der kompilierten Funktionsvorlage 'int __cdecl std::copy(char *,char *,int)'
Fehler beim Ausführen von cl.exe."Was mache ich noch falsch?
Hier mein Programm:
#include <iostream> using namespace std; template<typename T> void copy(T* trg, T const* src, size_t len) { while(len--) { *trg++=*src++; } } int main(void) { char a[] = "hallo"; char b[] = "du"; cout << copy (b,a,10) << endl; return 0; }
-
wie es aussieht, hast du ein Namenskonflikt, deswegen gibt es den Namespace std. Öffne den am besten mal nicht global und es sollte gehen (oder pack deine copy Version in einen anderen Namensraum)
-
Hi,
schieb doch Dein copy in einen eigenen Namespace
namespace MeinCopy{ template<typename T> void copy(T* trg, T const* src, size_t len) { while(len--) { *trg++=*src++; } } }
Außerdem noch zwei Sachen
char a[] = "hallo"; char b[] = "du";//Hier sind nur drei Byte reserviert, Du willst aber zehn schreiben cout << copy (b,a,10) << endl;//Da copy nichts zurückgibt, kannst Du das nicht im cout aufrufen
Du gehst über die Grenzen des reservierten Speichers hinaus. Das darfst Du nicht machen.
so:
char a[]="Hallo"; char b[20]="Du"; copy (b, a, strlen(a)+1 ) ;//+1 für das abschließende Nullzeichen cout << b;
grüße Con@n
-
Hallo!
Habe es jetzt mal so probiert. Erhalte aber trotzdem leider noch die gleiche
Fehlermeldung. Hat jemand noch eine Idee?Danke
M_arcus#include <iostream> using namespace std; namespace MeinCopy{ template<typename T> void copy(T* trg, T const* src, size_t len) { while(len--) { *trg++=*src++; } } } int main (void) { char a[]="Hallo"; char b[20]="Du"; copy (b, a, strlen(a)+1 ) ;//+1 für das abschließende Nullzeichen cout << b; return 0; }
-
MeinCopy::copy (b, a, strlen(a)+1 ) ;//+1 für das abschließende Nullzeichen
-
Jetzt funktioniert es.
Vielen Dank
M_arcus