C++ Error: no match for call to ‘(std::string {aka std::basic_string<char>}) (std::string&)’
Je suis novice en C++. Je recherche à plusieurs reprises, mais toujours pas la réponse. Je suis en train d'écrire une classe nommée Cours de décrire les cours les étudiants de prendre à l'école. Les Cours de la classe a 3 champs:
protected:
string courseName;
int courseNum;
float score;
Et j'ai une méthode publique "setName" pour définir le nom du cours:
Course &setName(string name)
{
this->courseName(name);
return (*this);
}
Cependant, lorsque j'ai essayé de compiler, le compilateur se plaint que:
C++ Error: no match for call to ‘(std::string {aka std::basic_string}) (std::string&)’
J'ai aussi essayé de modifier le code pour Cours &setName(string &nom)... Et le compilateur continue à se plaindre de la même erreur.
Mais si je change le code:
Course &setName(string name)
{
this->courseName = name;
return (*this);
}
Alors qu'il fonctionne bien. Je ne pouvais pas comprendre ce que le compilateur se plaint et pourquoi je ne peux pas utiliser directement l'initialisation?
std::string
ne pas déclarer cet opérateur qui résultats dans l'erreur que vous recevez.OriginalL'auteur Dreamer | 2013-06-23
Vous devez vous connecter pour publier un commentaire.
Parce que ce n'est pas une phase d'initialisation. C'est une affectation. Les deux attribution d'une (copie)de l'initialisation de faire usage de la
=
signe, mais ne laissez pas cet imbécile vous: les deux choses sont fondamentalement différents.D'initialisation est ce qui donne de la valeur à un objet lors de la construction. Lorsque votre
setName()
membre de la fonction est appelée, l'objet sur lequel elle est invoquée (ainsi que ses données membres) ont déjà été construits. Si vous souhaitez initialiser là, vous êtes en retard: vous avez manqué le train.Dans un constructeur liste d'initialisation, d'autre part, vous pouvez initialiser les données membres, comme suit:
Lorsque le
=
signe apparaît dans le contexte d'un déclaration, vous avez l'initialisation. Ainsi, par exemplestring str = "hello"
est une phase d'initialisation - un peu commestring str("Hello")
- parce que c'est dans le contexte de la déclaration destr
. Cependant,str = "hello"
est une affectation, puisque vous êtes de ne pas déclarer une nouvelle variable ici.Je vois la différence. Ne
string str = "hello"
est égal à: tout d'abord, ne initialisation par défautstring str()
puis de faire de la copie de l'assignationstr = "hello"
?Nope. Comme je l'ai écrit dans le commentaire précédent,
string str="hello"
est le même questring str("hello")
. Initialisation par défaut + mission sera:string str; str = "hello"
.Gotcha! Merci beaucoup.
OriginalL'auteur Andy Prowl
Vous essayez de attribuer la valeur d'une chaîne à l'autre, ce qui a déjà été initialisé. La syntaxe pour que est
alors que vous tentez l'équivalent de
et c'est seulement valide syntaxiquement dans ce contexte. Vous ne pouvez pas initialiser objets qui ont déjà été construits.
OriginalL'auteur juanchopanza