Problem mit char* bei int-Zuweisung



  • wie, wegen des typs?
    naja - ob string oder vector, nimmt sich fast nichts - ich hätt aber trotzdem vector genommen ^^

    http://www.cplusplus.com/reference/

    dort siehst du, was read für parameter entgegen nimmt, eine überladung ist in etwa so:

    istream& read(char *first, size_t count)

    in.read(&image[0], length);
    ruft dieses auf:
    image[0] = 1. element
    &image[0] = adresse des 1. elements
    length ist wohl selbsterklärend ;o)

    bb

    edit:

    achso und das mit der pixelklasse werd ich auch noch einbaun, weil stimmt schon, dass man sonst vllt mal ein delete vergisst, danke

    ich hoffe, dir fällt was eleganteres ein 😃
    ist das, was mir am allerwenigsten gefällt - aber ich hab erst am ende mal in die doku geguckt und gesehen, dass es so was gibt^^



  • joa guck ich morgen mal in meiner info stunde bei ^^
    also hauptsächlich war ich verwundert, weil vector doch eine art lineare liste ist und read() muss doch irgendwoher wissen, welche der variablen in dieser klasse auf das nächste element verweist, weil vector doch eig total anders is als char* und das kann read doch eig alles nich wissen ^^ deswegen versteh ichs nich ganz, warum das funktioniert



  • "vector doch eine art lineare liste"
    es ist ein array... (ne liste ist immer linear^^) es gibt 3 lineare container in der standard-lib: deque, list, vector

    und vector ist nur ein wrapper für ein array - also von aufbau + funktionsweise in etwa so:

    struct vector
    {
      int *x;
    
      vector(int laenge)
      {
        x = new int[laenge];
      }
    
      ~vector()
      {
        delete x;
      }
    
      int& operator[] (int index) {return x[index];}
    };
    

    also kann man sicher sein, dass es ein stück zusammenhängender speicher ist (im gegensatz zu deque oder list)...

    bb



  • aaaaah 🙂 dann macht das sinn, danke für die erklärung und schönen abend noch euch allen! (programmempfehlung: star wars 2 xD)


Anmelden zum Antworten