У меня проблемы с моим кодом:
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;
Я не совсем уверен, что об этом думать. Поскольку у меня есть весь код в одном файле, разве эта функция не должна быть распознана, так как она опубликована c?
Кроме того, я не совсем уверен, как обращаться с абстрактным классом, я подумал, что попытайтесь установить указатель события объекта комнаты, равный ссылке wumpus
.