Salut à tous,
J'ai un léger soucis de code design. Voici l'histoire: je possède une classe A qui contient un certain type de contenu, et une autre classe B qui décide quel type de contenu la première va afficher.
Jusqu'à présent les setters de la classe A étaient publics. Mais je veux les passer privés car n'importe qui peut venir la modifier (et ça s'est produit).
Du coup, l'idée est de rendre la classe B amie de la classe A, mais là encore c'est trop permissif. Seule UNE méthode de la classe B devrait pouvoir communiquer avec A. Ainsi les utilisateurs qui feront des requêtes à B, devront passer par tous les filtres avant de voir leur requête satisfaite.
Donc en gros ce que je veux c'est:
class B{
private:
virtual void setAContent( ... );
}
class A{
private:
virtual void setContent( ... );
friend virtual void B::setAContent( ... );
}
Lorsque je compile je reçois l'erreur suivante:
Error 1 error C2248:
DisplaysReconfigurationService::setDisplay' : cannot access private member declared in class
DisplaysReconfigurationService'
L'erreur apparaît à la compilation de chacune des classes séparément, et avec le même texte.
Seule solution à date ... passer la méthode B::setAContent ( ... ) ... publique.
Ce qui évidement détruit tout l’intérêt du système.
Avez vous une solution ?
Merci !
|