Maison  >  Article  >  développement back-end  >  Erreur de compilation C++ : les objets non const ne peuvent pas appeler les fonctions membres const, comment la résoudre ?

Erreur de compilation C++ : les objets non const ne peuvent pas appeler les fonctions membres const, comment la résoudre ?

PHPz
PHPzoriginal
2023-08-21 21:33:061141parcourir

Erreur de compilation C++ : les objets non const ne peuvent pas appeler les fonctions membres const, comment la résoudre ?

En C++, la fonction membre const fait référence à l'ajout du mot-clé const après la déclaration de la fonction, ce qui signifie que la fonction ne modifiera pas l'état de l'objet. Lorsqu'un objet est de type const, les fonctions ordinaires non membres const ne peuvent pas être appelées, mais les fonctions membres const peuvent être appelées. Cependant, lorsqu'un objet non const appelle une fonction membre const, l'erreur suivante se produit lors de la compilation : Les objets non const ne peuvent pas appeler les fonctions membres const.

Cette erreur se produit généralement dans les deux situations suivantes :

  1. Un objet non-const appelle une fonction membre const

Un exemple :

class Example {
public:
  void doSomething() const {
    // const function
  }
};

int main() {
  Example obj;
  obj.doSomething(); // 编译错误
  return 0;
}

Lorsqu'une fonction membre const est appelée sur un objet non-const, le compilateur donnera l'erreur ci-dessus. En effet, l'état de l'objet peut être modifié par les fonctions et le compilateur n'a aucun moyen de savoir si une fonction membre const ne modifie pas réellement l'objet.

Solution :

Pour éviter cette erreur, vous devez marquer l'objet appelant comme const. Ceci peut être réalisé en ajoutant le mot-clé const après le type d'objet, par exemple :

const Example obj;
obj.doSomething(); // 正确,因为 obj 是 const 类型的
  1. l'objet const appelle une fonction non membre const

Par exemple :

class Example {
public:
  void doSomething() {
    // non-const function
  }
};

int main() {
  const Example obj;
  obj.doSomething(); // 编译错误
  return 0;
}

Dans ce cas, puisque l'objet est de type const , le compilateur considérera que l'état de l'objet ne peut pas être modifié, et refusera ainsi d'appeler des fonctions non membres const.

Solution de contournement :

Si vous avez vraiment besoin de modifier l'état de l'objet, vous pouvez le convertir en un type non const. Ceci peut être réalisé en utilisant l'opérateur de conversion de type const_cast, par exemple :

const Example obj;
const_cast<Example&>(obj).doSomething(); // 正确,但不建议这样做

Il convient de noter que l'utilisation de const_cast pour la conversion de type peut conduire à un comportement indéfini, son utilisation dans le code formel doit donc être évitée.

Résumé

Ce qui précède sont les solutions à deux erreurs de compilation C++ courantes : les objets non const ne peuvent pas appeler les fonctions membres const. Lors de l'écriture de code, vous devez veiller à marquer les fonctions membres const comme const et éviter d'appeler des fonctions non membres const sur des objets const. Si vous avez vraiment besoin de modifier l'état d'un objet const, vous devez utiliser const_cast pour la conversion de type, mais vous devez éviter de l'utiliser dans du code formel.

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