找不到成员对象:没有名为get_event()的成员,也处理多态性和向量

Member object not found: no member named get_event(), Also dealing with polymorphism and vectors

本文关键字:成员 处理 向量 多态性 event 成员对象 get 找不到      更新时间:2023-10-16

我的代码有问题:

void room_encounter_randomizer(vector<vector<room> > *grid, int row, int col){//allocates events to the rooms.
wumpus w1;
int row_rand = rand() % row;
int col_rand = rand() % col;
for(int i =0 ; i < 4; i++){
for(int j = 0; j < row; j++){
for(int k = 0; k < col; k++){
grid[i][j].get_event() = &w1;
}   
}
}
}

它应该将事件随机分配给每个房间。以下是我的课程:

class event{//abstract class
public:
virtual void percept() = 0;
virtual void encounter() = 0;
};
class room{
private:
event* ev;
public:
event* get_event();
};
event *room::get_event(){
return ev;
}
class wumpus:public event{
public:
void percept();
void encounter();
};
void wumpus::percept(){
//if player is within a tile
cout << "You smell a terrible stench..." << endl;
}
void wumpus::encounter(){
cout << "The Wumpus eats you" << endl;
exit(0);
}
void create_grid(){
}

但我得到了这个错误:

vectortest.cpp: In function ‘void room_encounter_randomizer(std::vector<std::vector<room> >*, int, int)’:
vectortest.cpp:78:16: error: ‘__gnu_cxx::__alloc_traits<std::allocator<std::vector<room> > >::value_type’ has no member named ‘get_event’
grid[i][j].get_event() = &w1;

我真的不知道该怎么想。既然我把所有的代码都放在一个文件里,那么这个函数是公共的,难道不应该被识别吗?

此外,我真的不知道如何处理抽象类,我想我会尝试将房间对象事件指针设置为等于wumpus引用。

使用

void room_encounter_randomizer(vector<vector<room> > &grid, int row, int col)

并且传递CCD_ 2作为引用而不是作为指针。

TL;DR版本

vector<vector<room> > *grid是指向vectors的vector的指针。由于指针可以像数组一样进行索引(p[i]由C++标准定义为与*(p+i)相同(,

grid[i] // is a vector<vector<int>>
grid[i][j] // is a vector<int>
grid[i][j][k] // is an int

grid处的对象很可能是vectors中的一个vector,这在运行时将是致命的。