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?


  • Mod

    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]=...;
    

Anmelden zum Antworten