Vector mit Hilfe von Pointer füllen
-
Hallo,
Ich habe ein Problem bei dem Versuch, Inhalt in einen char-Vektor mit Hilfe eines Pointers zu zu kopieren:
#include <vector> #include <iostream> using namespace std; void add(void* element){ vector<char>* b = new vector<char>; for(int i = 0; i < 10; i++) b->push_back(0); char* e = (char*)element; for(int i = 0; i < 10; i++) b[i]=e[i]; } char array1[10]; char* point1=&array1[0]; int main(){ add(array1); }Ich erhalte beim Kompilieren folgende Fehlermeldung:
no match for ‘operator=’ in ‘*((+(((unsigned int)i) * 12u)) + b) = *(e + (+(unsigned int)i))’
Welchen Fehler begehe ich beim Kopieren des Character-Pointers?
Danke im Voraus!
-
Ich schätze, es müsste so gehen:
(*b)[i]=e[i];Sonst versuchst du ja, einen vector zuzuweisen.
EDIT: Mal abgesehen davon, dass ich im Moment den rechten Sinn nicht erkennen kann, warum du hier einen Zeiger auf einen vector nehmen willst.
-
b[i] ist ein Element eines Arrays of vector<char>, also ein vector<char>. e[i] ist ein Element eines Arrays of char, also ein char. Du versuchst also, eine Banane in eine Kiste von Bananen zu verwandeln (nicht: einzufügen!)
Was willst Du denn überhaupt machen? Der Code sieht ziemlich sinnlos aus, so dass man das nicht wirklich erraten kann. Meinst Du vielleicht vector<char*> statt vector<char>*?
Achja: Was soll das void-gecaste?

-
Vielen Dank für Eure Antworten.
Ja, der Code ist auch relativ sinnlos! Ich habe nur versucht, eine Aufgabe aus Bruce Eckle's C++-Buch zu lösen (chapter 4, aufgabe 16).
Was ich jedoch nicht verstehe:
b[i] ist ein Element eines Arrays of vector<char>, also ein vector<char>. e[i] ist ein Element eines Arrays of char, also ein char. Du versuchst also, eine Banane in eine Kiste von Bananen zu verwandeln (nicht: einzufügen!)
Mit Hilfe eines Vectors wird doch ein Array mit flexibler Speichergröße erzeugt. Warum kann ich mit Hilfe des Pointers b[] nicht direkt auf die Speicherplätze, analog zum char-Array zugreifen?
Liegt es daran, das der Pointer b nicht direkt auf den char-Speicher, sondern vielmehr auf das deklarierte Vektor-Objekt 'vector<char>' zeigt?
-
Martin2000 schrieb:
Mit Hilfe eines Vectors wird doch ein Array mit flexibler Speichergröße erzeugt. Warum kann ich mit Hilfe des Pointers b[] nicht direkt auf die Speicherplätze, analog zum char-Array zugreifen?
Liegt es daran, das der Pointer b nicht direkt auf den char-Speicher, sondern vielmehr auf das deklarierte Vektor-Objekt 'vector<char>' zeigt?Ja, weil du in deinem Programm einen Pointer auf einen Vector verwendest, der Zugriffsoperator [] sich aber auf den Vector selbst bezieht. Du musst den Pointer erst dereferenzieren.
-
b[i] dereferenziert zuerst den Zeiger. So wie Du beim push_back schon b->push_back schreiben musstest, müsstest Du hier b->[i] schreiben. Nur, dass diese Syntax nicht erlaubt ist. Also brauchst Du b[0][i] oder - wie Matze schon schrieb (*b)[i].
Ich denke sinniger ist es, erst garkeinen Zeiger zu verwenden.
std::vector<char> b; b.push_back(...); b[i]=...;