我正在尝试将对象推送到堆栈中,并在编译它时出错。 (我对队列做了同样的事情,它工作得很好,但我需要堆栈来实现 DFS(。
通用对象 'T' 被替换为 'pair(int, int('。
Dfs.h:
//Inculdes...
template<class T>
class Dfs : public Searcher<T> {
private:
AlgoStack<State<T>*> stack;
public:
vector<State<T>*> search(Searchable<T> *searchable) {
State<T> *start = searchable->getStartPoint();
stack.push(start);
//code....
}
AlgoStack.h:
//Inculdes...
template <class T>
class AlgoStack : public DataManager<T>{
private:
stack<State<T>*> myQ;
public:
void push(State<T>* temp) override {
myQ.push(temp);
}
错误:
error: no matching function for call to ‘AlgoStack<State<std::pair<int, int>* >>::push(State<std::pair<int, int> >*&)’
stack.push(start);
你的问题错过了重要的细节,实际上我不应该写这个答案,但由于你实际上也没有问问题,我只是这样做。
此错误消息:
error: no matching function for call to ‘AlgoStack<State<std::pair<int, int>* >>::push(State<std::pair<int, int> >*&)’
告诉我们有一个实例化AlgoStack
,模板参数正在State<std::pair<int, int>*
:
error: no matching function for call to ‘AlgoStack<State<std::pair<int, int>* > > ...
^--------------------------^
编译器需要有一个接受State<std::pair<int, int> >*&
的push
:
error: [...]>>::push(State<std::pair<int, int> >*&)
^---------------------------^
现在让我们看一下模板:
//Inculdes... template <class T> class AlgoStack : public DataManager<T>{ private: stack<State<T>*> myQ; public: void push(State<T>* temp) override { myQ.push(temp); }
上述错误(AlgoStack<State<std::pair<int, int>* > >
(中提到的实例化具有
push( State< State<std::pair<int,int>* >* temp)
但不是你试图调用的过载。我想有一个级别的State
太多了,你可以删除其中一个。