使用泛型类型推送到堆栈时出现问题



我正在尝试将对象推送到堆栈中,并在编译它时出错。 (我对队列做了同样的事情,它工作得很好,但我需要堆栈来实现 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太多了,你可以删除其中一个。

最新更新