Accéder aux membres protégés de la classe à partir de main

Monde.cpp:

World::World() { //something } World::~World() { //something } void World::doSomething(Organism *organisms[20][20]) { cout <Key(); // example of what I need to do here } int main() { World *world = new World(); World::doSomething(world->organisms); return 0; } 

monde.h

 class World { public: static void doSomething(Organism *organisms[20][20]); World(); ~World(); Organism *organisms[20][20]; }; 

Organisme.cpp

 Organism::Organism(){ } Organism::~Organism(){ } char Organism::Key(){ return this->key; } 

Organisme.h

 class Organism { public: Organism(); ~Organism(); // ... char Key(); protected: char key; // ... }; 

J’ai besoin de faire quelque chose comme une machine, créant des animaux. Le code ci-dessus fonctionne très bien, pour vous faire savoir: le tableau organismes est un tableau de pointeurs sur des organismes spécifiques de type Organisme, chaque organisme contient sa valeur de clé char. Mon problème est que je dois rendre le réseau d’organismes * protégé ou privé plutôt que public. Et là commencent les problèmes.

J’ai une erreur que je ne peux pas accéder au membre protégé de déclaré dans World dans le fichier World.cpp en ligne avec doSomething (organismes soulignés).

J’ai essayé d’utiliser un ami, etc. mais aucune des méthodes n’a fonctionné. Une idée de comment accéder à ce tableau à partir de main? (les parameters de la fonction peuvent être modifiés, le tableau doit être protégé / privé) N’importe quelle méthode simple, comment faire cela?

Merci pour l’aide

Vous pouvez en effet faire de la fonction main ami d’une classe comme ceci:

 int main(int, char**); namespace N { struct C { friend int ::main(int, char**); private: int privateer = 42; }; } int main(int, char**) { ::std::cout << N::C().privateer << "\n"; } 

Cependant, pourquoi ne pas simplement faire doSomething une fonction membre non statique?

Le problème est que main () est dans l’espace global et que ce n’est pas une classe. Donc, ce ne peut pas être l’ami de la classe qui a des membres privés. Votre meilleur pari est de créer une autre classe qui sera l’amie de votre classe et d’utiliser cette classe pour accéder aux membres privés.