Maison  >  Article  >  développement back-end  >  Erreur de syntaxe C++ : les fonctions non membres const ne peuvent pas être appelées avec des objets const, que dois-je faire ?

Erreur de syntaxe C++ : les fonctions non membres const ne peuvent pas être appelées avec des objets const, que dois-je faire ?

PHPz
PHPzoriginal
2023-08-22 13:57:051337parcourir

Erreur de syntaxe C++ : les fonctions non membres const ne peuvent pas être appelées avec des objets const, que dois-je faire ?

C++ est un langage de programmation très puissant, mais lors de l'apprentissage et de l'utilisation du C++, nous rencontrerons inévitablement certains problèmes. L'un des problèmes qui dérange souvent les débutants est le message d'erreur « Les fonctions non membres const ne peuvent pas être appelées avec des objets const ». Dans cet article, nous explorerons comment gérer cette erreur.

Tout d'abord, pour comprendre ce message d'erreur, nous devons connaître quelques connaissances de base. Il existe le mot-clé const en C++, qui peut être utilisé pour modifier des variables, des pointeurs et des paramètres de fonction, indiquant que ces objets ne peuvent pas être modifiés. En C++, si un objet est déclaré const, alors ses fonctions membres doivent également être déclarées const.

Lorsque nous appelons une fonction non membre const avec un objet const, le compilateur affichera l'erreur "Les fonctions non membres const ne peuvent pas être appelées avec des objets const." En effet, en C++, les objets const sont en lecture seule et ne peuvent pas être modifiés. Les fonctions non membres const peuvent modifier l'état de l'objet, elles ne peuvent donc pas être appelées avec des objets const.

Alors, comment devrions-nous gérer cette erreur ? Tout d’abord, nous devons déterminer si cette fonction membre doit modifier l’état de l’objet. S'il n'est pas nécessaire de modifier l'état de l'objet, nous devons alors déclarer cette fonction membre comme const. De cette façon, même si nous appelons cette fonction membre à l’aide d’un objet const, aucune erreur ne se produira.

Par exemple, supposons que nous ayons une classe :

class Person {
public:
    //getter函数,在不修改对象的情况下获取成员变量的值
    std::string getName() const;
    
    // setter函数,修改对象的成员变量值
    void setName(std::string name);
private:
    std::string m_name;
};

Dans cette classe, la fonction getName récupère uniquement la valeur de m_name et ne modifie pas l'état de l'objet. Par conséquent, nous devons le déclarer comme const:

std::string getName() const;

De plus, lors de la définition de cette fonction, nous devons également ajouter le mot-clé const après le nom de la fonction :

std::string Person::getName() const {
    return m_name;
}

De cette façon, même si nous utilisons un objet const pour appeler le getName fonction, ce ne sera pas le cas. Une erreur se produira.

Si une fonction membre doit modifier l'état de l'objet, nous ne pouvons pas le déclarer comme const. Mais si nous voulons appeler cette fonction en utilisant un objet const, nous pouvons convertir cet objet en un objet non const. Nous pouvons utiliser la conversion de type pour atteindre cet objectif. Par exemple, supposons que nous ayons un objet const Person p et que nous devions utiliser la fonction setName pour modifier la valeur de la variable membre m_name de p. On peut faire ceci :

const Person p;
Person& pRef = const_cast<Person&>(p); // 将const对象转化为非const对象
pRef.setName("New Name"); // 调用setName函数修改成员变量的值

Il est à noter que cette approche n'est pas recommandée. Si une fonction membre doit modifier l'état de l'objet, nous devons alors éviter d'utiliser un objet const pour appeler cette fonction.

En bref, en C++, il faut faire attention à l'utilisation du mot-clé const. Si un objet est déclaré const, alors ses fonctions membres doivent également être déclarées const. Lorsque nous rencontrons l'erreur « Les fonctions membres non const ne peuvent pas être appelées avec des objets const », nous devons vérifier soigneusement si la fonction membre doit modifier l'état de l'objet. Si nous n'avons pas besoin de modifier l'état de l'objet, nous devrions déclarer la fonction membre comme const . Si une fonction membre doit modifier l'état de l'objet, nous devons éviter d'utiliser des objets const pour appeler cette fonction.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn