int array in struct



  • Froschkönig schrieb:

    int d(0);
    d=7;
    int r(0);
    r=6;
    

    Du kannst die Variablen auch direkt mit den richtigen Zahlen initialisieren.

    int aGDM[0];
    for(byte i(0); i < 8; i++)
       aGDM[i]=0;
    

    2 Fehler: Du erstellst ein Array der Größe 0 und füllst dann nicht existierende Indizes mit Werten. Das Verhalten ist undefiniert. Außerdem: Was ist "byte"?

    meinstruct Kordin={d,r,&aGDM};
    

    So initialisierst du ein Array und kein Struct. Ich würde vorschlagen, du schlägst die Grundlagen nochmal in deinem C++-Buch nach.

    int aGDM[0]; in diesem fall habe ich mich beim posting vertippt natürlich müsste es 8 in den eckigen klammern sein.

    ersetze byte einfach durch int ist egal mir gehts eigentlich um die weitergabe der variablen als parameter bei der initialisierung des structs...



  • ...müsste klappen.

    Klappt das nicht nur, wenn der Struct innerhalb einer Funktion erstellt wird? Ansonsten sind die Variablen glaube ich nicht initialisiert. Bin mir aber nicht mehr ganz sicher.

    mir gehts eigentlich um die weitergabe der variablen als parameter bei der initialisierung des structs...

    Du brauchst einen Konstruktor für den Struct. Also so etwas wie: meinstruct(int p1, int p2, int p3): a(p1), ...*.



  • also mein lieber Froschkönig,

    ich habe ja normalerweise ein hohe schmerzgrenze.

    Also im C++ Primer steht folgendes:

    struct inflatable   // structure template
    {
        char name[20];
        float volume;
        double price;
    };
    int main()
    {
        inflatable guest =
        {
            "Glorious Gloria",  // name value
            1.88,               // volume value
            29.99               // price value
        };  // guest is a structure variable of type inflatable
            // It's initialized to the indicated values
    

    Also ich initialisiere mein struct nicht anders, vielleicht solltest Du nochmal C++ Grundlagen durchnehmen.

    Mein Problem ist nur das ich beim initialisieren eines integer array nicht klarkomme.....



  • Du kannst grundsätzlich ein Array nicht mit einem anderen Array initialisieren.

    char cA[] = "Hallo";
    char cB[6] = cA;  // Fehler
    
    int iA[] = {1, 2, 3, 4, 5};
    int iB[] = iA;  // Fehler
    

    Ein Array lässt sich nur mit einer Liste von passenden Werten initialisieren. Ausnahmen sind Character-arrays (§8.5.2) die auch mit Zeichenkettenliteralen initialisiert werden können.



  • Also ich initialisiere mein struct nicht anders, vielleicht solltest Du nochmal C++ Grundlagen durchnehmen.

    Da hast du anscheinend recht. Ich habe bisher immer angenommen, dass struct und class sich bis auf die default Zugangsberechtigung nicht unterscheiden.
    Zitat C++Primer: The only difference between a class defined with the class keyword or the struct keyword is the default acces level.

    Dass man structs auch so initialisieren kann, wusste ich nicht.

    Also im C++ Primer steht folgendes:

    Ernst gemeinte Frage: Auf welcher Seite steht das? Ich kann dazu in der aktuellen, vierten Edition nichts finden.



  • Froschkönig schrieb:

    Ich habe bisher immer angenommen, dass struct und class sich bis auf die default Zugangsberechtigung nicht unterscheiden.

    Damit hast du völlig Recht.

    Froschkönig schrieb:

    Dass man structs auch so initialisieren kann, wusste ich nicht.

    Das liegt daran, dass es sich um ein Aggregat handelt, und nicht am struct . Versuch das Gleiche mit class und einen public -Spezifizierer am Anfang, es wird ebenso funktionieren.



  • Das liegt daran, dass es sich um ein Aggregat handelt, und nicht am struct. Versuch das Gleiche mit class und einen public-Spezifizierer am Anfang, es wird ebenso funktionieren.

    Ah, vielen Dank für die Aufklärung.
    Entweder es steht im aktuellen Primer nicht drin oder ich habs überlesen. Davon habe ich wirklich noch nie gehört...



  • Froschkönig schrieb:

    Entweder es steht im aktuellen Primer nicht drin oder ich habs überlesen. Davon habe ich wirklich noch nie gehört...

    12.4.5. Explizite Initialisierung von Klassenelementen (S.549)



  • @Froschkönig
    C++ Primer Plus by Stephen Prata auf Seite 161

    also ich habs jetzt so gemacht...
    geht das eleganter??

    struct meinstruct{
    int a;
    int b;
    int myintarray[8];
    ..
    }; 
    
    int d(0);
    d=7;
    int r(0);
    r=6;
    int aGDM[8];
    for(short int i(0); i < 8; i++)
       aGDM[i]=0;
    
    meinstruct Kordin;
    Kordin.a=d;
    Kordin.b=r;
    for(short int i(0); i < 8; i++)
       Kordin.myintarray[i]=aGDM[i];
    


  • Wie wäre es damit?

    #include <iostream>
    using namespace std;
    
    struct aggregate
    {
    	int a;
    	int b;
    	int* ip;
    };
    
    int main()
    {
    	int ivec[] = {1, 2, 3, 4, 5, 6, 7, 8};
    	aggregate test = {0, 0, ivec};
    	cout << test.ip[7];
    	cin.get();
    }
    

    @ismaild & Mitleid
    Danke, jetzt habe ich's gefunden.



  • ismaild schrieb:

    Also im C++ Primer steht folgendes:

    ismaild schrieb:

    C++ Primer Plus by Stephen Prata auf Seite 161

    😡 😡 😡
    Also der Terminus "Der Primer" oder "C++ Primer" ist bereits belegt, und zwar von dem Buch des Großmeisters, C++-Genies und Miterfinders der C++-Sprache Stanley B. Lippman. Jede andere Verwendung ist zu unterlassen. 🙂



  • ismaild schrieb:

    also ich habs jetzt so gemacht...
    geht das eleganter??

    Schreib halt einen Konstruktur für das struct und übergib dem Referenz des Arrays.



  • @ismaild

    Du sagst uns bestimmt noch WAS du erreichen willst, oder?

    Sie http://www.c-plusplus.net/forum/viewtopic-var-t-is-200753.html
    Abschnitt "Frage nach dem, was du erreichen willst und nicht danach womit du es erreichen willst."

    Ein naives Beispiel zum Thema:

    struct meinstruct{
        int a;
        int b;
        int myintarray[8];
        char c;
        double mydoublearray{9};
    };
    // ..	
    
       int d(7);
       int r(6);
    
       meinstruct Kordin = {d, r, {}, 'a', {0.01, 0.03}};
    


  • Er will ein Array an das Strukt übergeben, ist doch wurscht wofür bei sowas Grundlegendem...



  • TdZ schrieb:

    Er will ein Array an das Strukt übergeben, ist doch wurscht wofür bei sowas Grundlegendem...

    Das ist deine Annahme. Wurscht bzw. wurst ist es schon in dem Moment nicht mehr, wenn "das Strukt" ein Aggregat bleiben soll und der Konstruktor ausscheidet.

    Desweiteren könnte die "Füllung" der Arrays mit 0 (siehe seine Quelltexte) andeuten, dass er das gesamte Array mit 0 initialisieren und erst später etwas damit machen will.

    Eine klare Aussage dazu fehlt noch.



  • Genau ich will esrtmal mit 0 initialisieren und später was damit machen.

    Besten Dank Freunde für die Beiträge.


Anmelden zum Antworten