Прямо сейчас у меня есть базовый класс, класс Base {}, с двумя производными классами, BFS {} и DFS {}. У BFS есть очередь, а у DFS - стек, поэтому у них обоих есть член, называемый «узлами», но типом являются их соответствующие std :: queue и std :: stack. Моя функция поиска принимает указатель на базовый класс в качестве своего параметра, чтобы она могла принимать оба производных класса, и выполняет поиск, выдвигая и извлекая из классов-членов внутри производных классов (согласно обычным алгоритмам DFS BFS). Проблема заключается в том, что, поскольку я передавал свой базовый класс в качестве параметра, всякий раз, когда я пытаюсь вызвать push или pop для стека / очереди членов, называемых «узлами», из производных классов, он всегда говорит, что push / pop невозможно сделать, потому чтовнутри базового класса нет члена, называемого "узлами". Как я должен сделать эту работу? Кроме того, эта настройка является требованием задания, которое я выполняю, и я просто не могу понять, как это должно работать, любая помощь приветствуется. Спасибо!
class Base {
public:
virtual void push(uint64_t roomID, float intensity, int distance) = 0;
virtual Node pop(void) = 0;
virtual int size(void) = 0;
};
class Breadth : public Base {
public:
std::queue<std::pair<uint64_t, int>> U;
void push(uint64_t roomID, float intensity, int distance) { std::pair<uint64_t, int> p(roomID, distance); U.push(p); }
Node pop() { Node rr; rr.ID = U.front().first; rr.distance = U.front().second; U.pop(); return rr; }
int size() { return U.size(); }
};
class Depth : public Base {
public:
std::stack<std::pair<uint64_t, int>> U;
void push(uint64_t roomID, float intensity, int distance) { std::pair<uint64_t, int> p(roomID, distance); U.push(p); }
UnexploredRoom pop() { U.pop(); }
int size() { U.size(); }
};
void robotSearch::searchLoop(Base* search, Discovered* D, uint64_t roomID)
{
Node room;
room.ID = roomID;
room.distance = 0;
search->U.push(room); //problem here, compiler wont let me push U
...
}