World.cpp:
World::World() {
//something
}
World::~World() {
//something
}
void World::doSomething(Organism *organisms[20][20]) {
cout << organisms[1][1]->Key(); // example of what I need to do here
}
int main() {
World *world = new World();
World::doSomething(world->organisms);
return 0;
}
world.h
class World {
public:
static void doSomething(Organism *organisms[20][20]);
World();
~World();
Organism *organisms[20][20];
};
Organism.cpp
Organism::Organism(){
}
Organism::~Organism(){
}
char Organism::Key(){
return this->key;
}
Organism.h
class Organism {
public:
Organism();
~Organism();
// ...
char Key();
protected:
char key;
// ...
};
我需要制作类似机器的东西,创造动物。上面的代码非常好用,让你知道:数组有机体是一个指向有机体类型的特定生物的指针数组,每个有机体都包含它的char键值。 我的问题是我需要使Organism *有机体阵列受到保护或私有而不是公开。并且开始出现问题。
我有一个错误,我无法使用doSomething(带下划线的有机体)访问文件World.cpp行中的World中声明的受保护成员。
我尝试过使用朋友等,但没有一种方法有效。知道如何从main访问这个数组? (函数参数可以更改,数组需要保护/私有)任何简单的方法怎么做?
感谢您的帮助
答案 0 :(得分:1)
问题是main()在全局空间中,而不是类。所以它不能成为拥有私人成员的班级的朋友。你最好的选择是创建另一个将成为你班级朋友的班级,并使用该班级访问私人会员。
答案 1 :(得分:1)
你确实可以使main
函数成为类的朋友,如下所示:
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";
}
但是,为什么不让doSomething
成为非静态成员函数?