C++ Grundlagen: Konstante Werte, Arrays und Vektoren



  • Hallo

    Ich habe Verständnisprobleme mit Arrays und Vektoren und möchte um Hilfe bitten Licht ins Dunkle zu bringen.

    1.)
    Wenn ich im Header setze:

    #define ADSIZE 20
    

    und in der main Funktion:

    int Sequenz[ADSIZE];
    for(il=0; il<ADSIZE; il++){Sequenz[il]=il;}
    for(il=0; il<ADSIZE; il++){cout << Sequenz[il];}
    

    Dann wird mir auf der Konsole ein Array von 0 bis 19 angezeigt.

    Wenn ich allerdings nicht ADSIZE im Header definiere, sondern in der main Funktion

    const int ADSIZE;
    ADSIZE = 20;
    

    dann erhalte ich den Compiler Fehler:

    error: uninitialized const ‘ADSIZE’
    error: assignment of read-only variable ‘ADSIZE’
    

    Bin ich damit also verpflichtet feste Variableninhalte immer mit define zu verwenden? Mir ist es wichtig, dass absolut gesichert ist, dass die Größe ADSIZE niemals von dem C++ Programm geändert werden darf, unter keinen Umständen.

    2.)
    Wenn ich bis jetzt einen Vektor benötige, dann habe ich ein Array erstellt und dieses dann in einen Vektor umgewandelt. Das finde ich unschön und würde lieber direkt den Vektor definieren. Mein Problem ist nun, dass

    vector<int> sequenz;
    for(il=0; il<ADSIZE; il++){sequenz[il]=il;}
    

    zu einem Compiler Fehler führt:

    Segmentation fault
    

    Ich habe das Programm mit gdb ausführen lassen und dieses sagt mir:

    Program received signal SIGSEGV, Segmentation fault.
    0x00000000004007e3 in main () at test.cpp:31
    31	for(il=0; il<ADSIZE; il++){sequenz[il]=il;}
    

    aber abgesehen davon, dass in der for Schleife was nicht zu stimmen scheint, weiss ich das nicht weiter zu interpretieren.

    Also wie kann ich mein Array 0 bis ADSIZE-1 direkt als Vektor deklarieren?

    Danke für Hilfe und Grüße



  • cpp_Jungspund schrieb:

    Hallo
    Ich habe Verständnisprobleme mit Arrays und Vektoren und möchte um Hilfe bitten Licht ins Dunkle zu bringen.
    1.)
    Wenn ich im Header setze:

    #define ADSIZE 20
    

    Wirf Dein Buch weg.

    cpp_Jungspund schrieb:

    und in der main Funktion:

    int Sequenz[ADSIZE];
    for(il=0; il<ADSIZE; il++){Sequenz[il]=il;}
    for(il=0; il<ADSIZE; il++){cout << Sequenz[il];}
    

    Dann wird mir auf der Konsole ein Array von 0 bis 19 angezeigt.

    Jup.

    cpp_Jungspund schrieb:

    Wenn ich allerdings nicht ADSIZE im Header definiere, sondern in der main Funktion

    const int ADSIZE;
    ADSIZE = 20;
    

    Quatsch.

    const int ADSIZE = 20;
    

    Willst ja den const nicht ändern können.

    cpp_Jungspund schrieb:

    Bin ich damit also verpflichtet feste Variableninhalte immer mit define zu verwenden? Mir ist es wichtig, dass absolut gesichert ist, dass die Größe ADSIZE niemals von dem C++ Programm geändert werden darf, unter keinen Umständen.

    const ist sicher genug dafür. (vermutlich bei Dir sogar sicherer als #define)

    cpp_Jungspund schrieb:

    Wenn ich bis jetzt einen Vektor benötige, dann habe ich ein Array erstellt und dieses dann in einen Vektor umgewandelt. Das finde ich unschön und würde lieber direkt den Vektor definieren.

    Mein Problem ist nun, dass

    vector<int> sequenz;
    for(il=0; il<ADSIZE; il++){sequenz[il]=il;}
    

    zu einem Compiler Fehler führt:

    Segmentation fault
    

    Hast keinen Speicher im vector angelegt.

    vector<int> sequenz;
    for(il=0; il<ADSIZE; il++){sequenz.push_back(il);}
    

    cpp_Jungspund schrieb:

    Also wie kann ich mein Array 0 bis ADSIZE-1 direkt als Vektor deklarieren?

    Das willst Du gar nicht. Also ich fülle vectors zu 99% per pushback/emplaceback und die Lust, per []= zu füllen, ist nur veraltete Array-Denke.

    Wirf Dein Buch weg.





  • Ich habe gerade mal geguckt. Mein C++ Buch das ich hier in Händen halt ist von 1997.

    Die Post brachte heute auch mein neues Buch das ich bestellt habe: Der C++ Programmierer, 4 Auflage. Auf dem Cover steht "Aktuell zu C++14". Das werde ich jetzt lesen.

    Ich habe verstanden was du schriebst und jetzt verstehe ich es besser. Danke für die Hilfe.

    @roflo
    Ich mag es sehr in mehrere Communities eine Frage zu stellen weil dann automatisch mehr Gehirne beteiligt sind und nicht nur ich, sondern auch andere profitieren davon, denn wenn in einem Thema etwas jemand neues schreibt das in einem anderen Board nicht angesprochen wurde, kann man darauf verweisen und so die Kommunikation insgesamt fördern.

    Grüße


Anmelden zum Antworten