IntelliSense: l'objet a de type de qualificatifs qui ne sont pas compatibles avec la fonction de membre
J'ai une classe de la Personne appelée:
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();
};
Dans une autre classe, j'ai cette méthode:
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;
}
C'est la déclaration de personnes:
static const int size=8;
Person people[size];
Lorsque j'essaie de compiler, j'obtiens cette erreur:
IntelliSense: the object has type qualifiers that are not compatible with the member function
avec des lignes rouges, dans le cadre de l'2 personnes[i] dans la méthode d'impression
Ce que je fais mal?
Quelle est la définition de
people
? A-t-elle tout const
qualificatifs dans n'importe où?OriginalL'auteur Chin | 2012-10-27
Vous devez vous connecter pour publier un commentaire.
getName
n'est pas const,getScore
n'est pas const, maisprint
est. Faire les deux premiers const commeprint
. Vous ne pouvez pas appeler un non-const méthode avec un const objet. Depuis votre les objets de la Personne sont des membres directs de votre autre classe et puisque vous êtes dans une méthode const ils sont considérés comme const.En général, vous devriez envisager de chaque méthode vous écrire et de le déclarer const si c'est ce qu'il est. Simple getters comme
getScore
etgetName
doit toujours être const.Dans votre classe, vous avez (je présume)
Person people[size];
. Cela signifie que dans unconst
méthode de votre classe, vous n'êtes pas autorisé à modifier lepeople
tableau, par exemplepeople[0] = x;
serait illégal. L'appel d'une non-constPerson
méthode est juste une autre façon de changer lapeople
tableau,people[0].setScore(20.0);
serait également illégal. Parce que vous n'avez pas à déclarerPerson::getScore()
comme const le compilateur ne savais pas que vous n'étiez pas en train de changer lapeople
tableau, si c'était une erreur.merci, je comprends maintenant 🙂
OriginalL'auteur john