2012-10-27 16 views
15

ho una classe denominata persona:IntelliSense: l'oggetto ha tipo qualificatori che non sono compatibili con la funzione membro

class Person { 
    string name; 
    long score; 
public: 
    Person(string name="", long score=0); 
    void setName(string name); 
    void setScore(long score); 
    string getName(); 
    long getScore(); 
}; 

In un'altra classe, ho questo metodo:

void print() const { 
    for (int i=0; i< nPlayers; i++) 
     cout << "#" << i << ": " << people[i].getScore()//people is an array of person objects 
    << " " << people[i].getName() << endl; 
} 

Questo è la dichiarazione delle persone:

static const int size=8; 
    Person people[size]; 

Quando provo a compilare l'ottengo questo errore:

IntelliSense: the object has type qualifiers that are not compatible with the member function 

con linee rosse sotto il 2 persone [i] nel metodo di stampa

Che cosa sto facendo di sbagliato?

+0

Qual è la definizione di 'persone'? Ha qualificatori 'const' in esso ovunque? –

risposta

20

getName non è const, getScore non è const, ma è print. Crea i primi due const come print. Non è possibile chiamare un metodo non-const con un oggetto const. Poiché i tuoi oggetti Person sono membri diretti della tua altra classe e dal momento che sei in un metodo const sono considerati const.

In generale si dovrebbe considerare ogni metodo che si scrive e dichiararlo const se è quello che è. Getter semplici come getScore e getName devono essere sempre const.

+0

Puoi spiegarci un po 'su questo: "Poiché i tuoi oggetti Persona sono membri diretti della tua altra classe e dal momento che sei in un metodo const sono considerati const" Grazie! – Chin

+2

Nell'altra classe hai (presumo) 'Persone persone [dimensioni];'. Ciò significa che all'interno di un metodo 'const' della tua altra classe non ti è permesso cambiare la matrice' people', quindi per esempio 'people [0] = x;' sarebbe illegale. Chiamare un metodo non-const 'Person' è solo un altro modo per cambiare l'array' people', quindi 'people [0] .setScore (20.0);' sarebbe anche illegale. Poiché non hai dichiarato 'Person :: getScore()' come const, il compilatore non sapeva che non stavi cercando di cambiare l'array 'people', quindi ha dato un errore. – john

+0

grazie, ho capito ora :) – Chin

Problemi correlati