J'ai un problème avec l'amitié en C++. J'ai deux classes, A et B, où la définition de B utilise une instance de A. Je veux aussi donner une fonction membre dans l'accès B aux membres de données privées dans A, et ainsi lui accorder l'amitié. Mais maintenant, l'énigme est que pour la déclaration d'amitié dans la définition de classe A, la classe B n'est pas encore définie, donc l'IDE (VS 2010) ne sait pas quoi en faire.C++: octroi de la fonction membre de la déclaration d'amitié?
#include <iostream>
using namespace std;
class B;
class A {
friend int B::fun(A A);//B as yet undefined here
int a;
};
class B {
int b;
public:
int fun(A inst);
};
int B::fun(A A)
{
int N = A.a + b;//this throws up an error, since a is not accessible
return N;
}
J'ai eu un coup d'œil à Why this friend function can't access a private member of the class? mais la suggestion il d'utiliser une déclaration avant de class B;
ne semble pas fonctionner. Comment puis-je résoudre ce problème directement (c'est-à-dire sans faire class B
un ami de class A
, ou en faisant B hérité de A ou en introduisant une fonction getA()
)? J'ai également regardé Granting friendship to a function from a class defined in a different header, mais mes classes sont dans un fichier .cpp (et il serait préférable de le garder ainsi), pas dans des fichiers d'en-tête séparés, et je ne veux pas accorder toute l'amitié de classe de toute façon. Pendant ce temps, C++ Forward declaration , friend function problem fournit la réponse à un problème légèrement plus simple - je ne peux pas simplement changer l'ordre des définitions. Pendant ce temps, http://msdn.microsoft.com/en-us/library/ahhw8bzz.aspx fournit un autre exemple similaire, mais l'exemple ne fonctionne pas sur mon ordinateur, alors dois-je vérifier certains indicateurs de compilation ou quelque chose?
Ce ne suffit pas, il y a la dépendance circulaire – SomeWittyUsername
Fonctionne bien ici ... :) – JasonD
J'ai aussi essayé et cela fonctionne –