我正在尝试使用类的指针向量。当试图访问Agent类的任何成员时,我得到一个错误的指针或空数据。代码如下。
class Grue : public Agent
{
string name;
Room *cur_room;
public:
Functions()....
};
class Agent
{
Room *cur_room;
string name;
public:
Functions()....
};
Grue* Grue1 = new Grue("Test", roompointer);
vector<Agent*> agents;
agents.push_back(Grue1);
答案 0 :(得分:4)
默认情况下,数据成员在类中是私有的。因此,您的 cur_room ,名称变量在Agent和Grue类中是不同的。 当您调用Grue构造函数时,Grue字段被初始化,但向量存储代理指针,因此您正在访问未初始化的代理字段。
这是正确的方法:
class Agent
{
protected:
Room *cur_room;
string name;
public:
Agent(string n, Room * r)
: cur_room (r), name(n)
{}
};
class Grue : public Agent
{
public:
Grue(string n, Room * r):Agent(n,r)
{
}
};