probleme struct elemente zu belegen



  • Hallo,

    ich habe eine struct definition wie:

    struct lotto
    	{
    	  bool out;
    	  char name[25];
    	  int ilosanzahl;
    	  int tip[10][6];
    	  int treffer[10][6];
    	};
    
    lotto lottospieler[5];
    

    Nun möchte ich für das element tip von lottospiler die erste dimension belegen.
    habe versucht es mit:

    x = 0;
    cin >> lottospieler[x].tip[x];
    

    bzw.

    for(x=0; x< 10; x++)
    {
      lottospieler[1].tip[x] = x;
    
    }
    

    leider bekomme ich dann für variante 1 diese fehlermeldung:

    Fehler 2 error C2679: Binärer Operator '>>': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'int [6]' akzeptiert (oder keine geeignete Konvertierung möglich) c:\dokumente und einstellungen\conroe\eigene dateien\visual studio 2005\projects\lotto\lotto\lotto.cpp 307

    bzw.

    für variante 2 diese:

    Fehler 2 error C2679: Binärer Operator '>>': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'int [6]' akzeptiert (oder keine geeignete Konvertierung möglich) c:\dokumente und einstellungen\conroe\eigene dateien\visual studio 2005\projects\lotto\lotto\lotto.cpp 303

    wie gesagt ich möchte nur die erste dimension belegen!
    bloss wie stelle ich das an?



  • Du hast ein 2D Array, also musst du auch einen 2 Wert nehmen.

    cin >> lottospieler[x].tip[x][x];
    

    So sollte es gehen.



  • drakon schrieb:

    Du hast ein 2D Array, also musst du auch einen 2 Wert nehmen.

    cin >> lottospieler[x].tip[x][x];
    

    So sollte es gehen.

    Damit kann ich es belegen das ist richtig.
    aber wenn ich später irgendwelche auswertung für tip[1] fahren möchte
    um die zahlen aus der 2 dimension in bezug bringen zu können muss ich den jeweiligen tip entsprechend addressieren können.
    das kann ich halt so nicht!

    so wäre z.b. tip[1] mit einer total wilkürlichen nicht vertrauenswürden speicheraddresse
    belegt.



  • Ich glaube du hast noch ein paar grundlegende Verständnis Probleme mit Arrays und Adressen..

    Ein Array ist eine Ansammlungen von Instanzen des Types, für den du ihn erstellt hast.

    int tip[10][6];
    

    Macht dir 10x6, also 60 int's hintereinander.

    Davon hat JEDER eine Adresse im Speicher.

    int* pZahl = &itp[5][2];
    

    pZahl speichert dir die Adresse des int's an Stelle 5, 2. Also an 32-iger Stelle (5*6 + 2).



  • ok danke der Aufklärung.

    nach deinem bsp. hätte ich jetzt gedacht wenn int tip[5][6] definiert wurde.
    wenn aber dann 30 speicherplätze reserviert sind,
    wieso ist dann wenn ich auf tip[5][2] schreibe dieser dann mit 32 belegt?
    hätte jetzt auf 10 getippt.



  • Also der Speicher ist ja nacheinander.

    Ich mach es jetzt mit einem kleineren Array.

    int a[3][3];
    

    Ein Array von 3x3 int's.

    a[2][1] = 2;
    

    Schreibt an die Stelle 2x1 eine 2 rein.

    0  1  2
    0 x| x| x
      -  -  - 
    1 x| x| x
      -  -  - 
    2 x| 2| x
    

    So kannst du dir ja ein 2D- Array vorstellen. Nur liegt das ja nicht so, sondern so im Speicher:

    0  1  2   3  4  5     6  7  8
    
     x| x| x  |x| x| x   | x| 2| x
     0  1  2   0  1  2     0  1  2 
    ________   _______    ________
       0          1         2
    

    Kannst du es dir jetzt vorstellen?
    Ich hoffe, dass das bildlich genug war. 🙂



  • drakon schrieb:

    So kannst du dir ja ein 2D- Array vorstellen. Nur liegt das ja nicht so, sondern so im Speicher:

    0  1  2   3  4  5     6  7  8
    
     x| x| x  |x| x| x   | x| 2| x
     0  1  2   0  1  2     0  1  2 
    ________   _______    ________
       0          1         2
    

    Kannst du es dir jetzt vorstellen?
    Ich hoffe, dass das bildlich genug war. 🙂

    Danke für deine mühe 🙂

    Dein letztes Bsp. verstehe ich jedoch nicht.



  • Hmm, nochmal:

    0  1  2   3  4  5     6  7  8       // Das hier sind die "1-Dimensionalen Werte"
    
    ____0___  ___1____   ___2_____    // Das hier sind die a[i][] i-ten Elemente
    
     x| x| x  |x| x| x   | x| 2| x      // So "siehts" im Array aus
    
     0  1  2   0  1  2     0  1  2      // Und hier sind die a[][j]  j-ten Elemente
    

    Ich hoffe mal, dass es jetzt verständlich ist.


Anmelden zum Antworten