Это программа, которая имитирует простую игру для сбора ресурсов. Роботы собирают ресурсы с карты и перемещаются случайным образом, каждый из которых выполняет некоторые действия. Моя проблема заключается в том, что я хочу получить доступ к вектору из карты классов в классе разорванных роботов «RescueBot». Программа написана в нескольких файлах, header.h, header.cpp, main.cppКак объект векторного доступа к векторным элементам
У меня есть вектор объектов типа «Robots» и пример моего файла header.h:
class Map{
private:
char World[20][20]; // The size of Map is 20 x 20
vector<Robots*>RobotsVector;
public:
Map();
vector<Robots*>*getRobotsVector();
}
// I access the vector with getRobotsVector() which belongs to Map class but returns
// Robot objects. Done this so i can access Robot objects within the Map class.
class Robots
{
private:
//some variables
public:
//some functions
virtual void movement()=0; // this is the function that handles the robots moves
virtual void action()=0; // this is the function that handles the robots actions
}
class RescueBot:public Robots{
void movement();
void action();
//some unique RescueBot stuff here
}
Это из файла header.cpp:
#include "header.h"
vector<Robots*>*Map::getRobotsVector(){return &RobotsVector;}
//example of object creation and pushing into vector
void Map::creation(){
for (int x=0;x<4;x++){
getRobotsVector()->push_back(new RescueBot);
}
}
void RescueBot::action(){
//do stuff
for(int i=0;i<Map::getRobotsVector()->size();i++){
//Here is the problem. I cant get inside the for loop
Map::getRobotsVector()->at(i)->setDamaged(false); //Changes a flag in other objects
}
}
Я пытался сделать класс derivered класса роботов Map. После этого, когда я запускаю его, я получаю доступ к ресурсу в RescueBot :: action, а фактический вектор имеет в нем объекты. Если я не сделаю это, то он не скомпилируется.
Как я могу получить доступ к вектору из RescueBot :: action() ??
Он не может, если вы не передаете вектор конструктору объекта, или установить указатель на вектор на каждом объекте, который вы добавляете этот вектор. Как правило, ни одна из них не является особенно хорошей идеей. – dasblinkenlight
Ваше мнение об этом не так. Если RescueBot необходимо изменить Map, тогда ему необходимо взять карту в качестве параметра либо в конструкторе, либо в команде действия (лично я бы предпочел команду действия). – IdeaHat