WinTricks Forum

WinTricks Forum (http://forum.wintricks.it/index.php)
-   Programmazione (http://forum.wintricks.it/forumdisplay.php?f=21)
-   -   [C++] read-only structure (http://forum.wintricks.it/showthread.php?t=145478)

ArrigoC 08-09-2009 20.54.55

[C++] read-only structure
 
Ciao a tutti. Sto facendo un programma, che non dovrebbe avere nulla di sbagliato, ma il compilatore mi scrive:

Codice:

assignment of data-member `Stagione::annoStagione' in read-only structure
Qualcuno può spiegarmi per favore cosa vuol significare questo errore, e come potrei correggerlo?

Grazie mille!

Semi.genius 08-09-2009 21.46.46

Posta la definizione della struct Stagione :D

ArrigoC 08-09-2009 21.53.36

Scrivo tutto ciò che riguarda la Struct Stagione:

Codice:

// struttura Stagione
typedef struct Stagione
{
        int annoStagione;
        string squadra;
        int presenze;
        int golFatti;
        int golSubiti;
};
// inserimento dati nella struttura stagione
void inStagione(Stagione temp);
void inStagione(Stagione temp)
{
    cout << "Anno stagione: ";
    cin >> temp.annoStagione;
    getline(cin,temp.squadra); // getline fasullo per ovviare il problema del cin
    cout << "Squadra: ";
    getline(cin,temp.squadra);
    cout << "Presenze: ";
    cin >> temp.presenze;
    getline(cin,temp.squadra);
    cout << "Gol Fatti: ";
    cin >> temp.golFatti;
    getline(cin,temp.squadra);
    cout << "Gol Subiti: ";
    cin >> temp.golSubiti;
    getline(cin,temp.squadra);
}

// somma tra calciatore e stagione. il problema riguarda il secondo membro, ossia B.annoStagione ( ad esempio)
Calciatore ::Calciatore operator+(const Calciatore& A, const Stagione& B)
{
          bool t=true;
          for (int i; i < 40 && ( A.car.carriera[i].annoStagione == 0); i++ )
          {
              A.car.carriera[i].annoStagione = B.annoStagione;
              A.car.carriera[i].squadra = B.squadra;
              A.car.carriera[i].presenze = B.presenze;
              A.car.carriera[i].golFatti = B.golFatti;
              A.car.carriera[i].golSubiti = B.golSubiti;
              t=false;
          }
          if (t) cout << "Archivio stagioni pieno. "<<endl;
}


P8257 WebMaster 09-09-2009 10.09.02

Const è una parola chiave che in C e C++ ci si dovrebbe dimenticare...

Semi.genius 09-09-2009 12.58.19

Quota:

Inviato da P8257 WebMaster
Const è una parola chiave che in C e C++ ci si dovrebbe dimenticare...

Beh, in questo caso il problema è che l'overloading dell'operatore + non si fa in questo modo... :mm: andrebbe restituito il risultato, non modificato la variabile

P8257 WebMaster 09-09-2009 16.55.31

Esatto, è sbagliato l'overload dell'operatore, la mia affermazione riguardo a 'const' è che al limite si può utilizzare se si vuole fare overload di operatori come '<<' e '>>' che non abbiano interazione con membri interni ma magari con stream e altre entità che non debbano modificare direttamente...


Orario GMT +2. Ora sono le: 09.25.28.

vBulletin 3.8.6 - Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.