PDA

Visualizza versione completa : [C++] read-only structure


ArrigoC
08-09-2009, 19.54.55
Ciao a tutti. Sto facendo un programma, che non dovrebbe avere nulla di sbagliato, ma il compilatore mi scrive:

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, 20.46.46
Posta la definizione della struct Stagione :D

ArrigoC
08-09-2009, 20.53.36
Scrivo tutto ciò che riguarda la Struct Stagione:


// 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, 09.09.02
Const è una parola chiave che in C e C++ ci si dovrebbe dimenticare...

Semi.genius
09-09-2009, 11.58.19
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, 15.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...