Maison  >  Article  >  développement back-end  >  Comment accéder à une fonction ami sans arguments définis dans une classe ?

Comment accéder à une fonction ami sans arguments définis dans une classe ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-05 15:41:02954parcourir

How do you access a friend function without arguments defined inside a class?

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!

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