从main访问受保护的类成员

时间:2014-04-22 22:56:52

标签: c++ arrays class private protected

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访问这个数组? (函数参数可以更改,数组需要保护/私有)任何简单的方法怎么做?

感谢您的帮助

2 个答案:

答案 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成为非静态成员函数?