Maison > Article > développement back-end > Comment accéder à une fonction ami sans arguments définis dans une classe ?
Accès aux fonctions ami définies dans la classe
En C , il est possible de définir des fonctions ami au sein d'une classe. Les fonctions amies sont des fonctions externes qui ont accès aux membres privés et protégés de la classe. En règle générale, les fonctions d'ami sont utilisées pour permettre à des modules ou des fonctions externes d'interagir avec les membres de la classe.
Problème :
Considérez le code suivant :
<code class="cpp">class A { public: friend void fun(A a); // Friend function that takes an argument of type A friend void fun2(); // Friend function without arguments friend void fun3(); // Friend function declaration }; void fun(A a) { std::cout << "Im here" << std::endl; } void fun3() { std::cout << "Im here3" << std::endl; } int main() { fun(A()); // Works OK // fun2(); // Error: 'fun2' was not declared in this scope // A::fun2(); // Error: 'fun2' is not a member of 'A' fun3(); // Works OK }</code>
Question :
Comment accéder à la fonction ami fun2() ?
Réponse :
Pour accéder à ami fonction fun2(), vous devez la définir explicitement en dehors de la classe. Actuellement, la définition de fun2() est manquante, c'est pourquoi le compilateur ne peut pas la trouver dans la portée globale.
Pour résoudre le problème, définissez fun2() comme fonction globale en dehors de la classe :
<code class="cpp">void fun2() { std::cout << "Im here2" << std::endl; }</code>
Avec ce changement, vous devriez pouvoir accéder à fun2() sans rencontrer d'erreurs :
<code class="cpp">fun2(); // Works OK</code>
De plus, il est recommandé de suivre le modèle typique consistant à définir les fonctions d'ami en tant qu'entités distinctes. en dehors de la classe pour plus de clarté et de maintenabilité :
<code class="cpp">class A { friend void fun(A a); friend void fun2(); friend void fun3(); }; void fun(A a) { std::cout << "I'm here" << std::endl; } void fun2() { std::cout << "I'm here2" << std::endl; } void fun3(); // Leave it as a declaration int main() { fun(A()); fun2(); fun3(); }</code>
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!