错误:原型与类中的任何原型都不匹配



当我尝试编译代码时,我收到此错误:

Priority_queue.h:63:6: error: prototype for ‘void Priority_queue<T>::push_heap(Iterator, Iterator)’ does not match any in class ‘Priority_queue<T>’
 void Priority_queue<T>::push_heap(Iterator start, Iterator stop) {
      ^
Priority_queue.h:31:10: error: candidate is: void Priority_queue<T>::push_heap(typename std::vector<T>::iterator, typename std::vector<T>::iterator)
     void push_heap(typename vector<T>::iterator start, typename vector<T>::iterator stop);
          ^

Priority_queue.h

#include <vector>
using namespace std;
template <class T>
class Priority_queue {
public:
    ...
    void push_heap(typename vector<T>::iterator start, typename vector<T>::iterator stop);
    void pop_heap(typename vector<T>::iterator start, typename vector<T>::iterator stop);
    void adjust_heap(typename vector<T>::iterator start, unsigned int heapSize, unsigned int position);
    void make_heap(typename vector<T>::iterator start, typename vector<T>::iterator stop);
    void sort_heap(typename vector<T>::iterator start, typename vector<T>::iterator stop);
    void heap_sort(typename vector<T>::iterator start, typename vector<T>::iterator stop);
private:
    vector<T> c;
};
template <class T>
template <class Iterator>
void Priority_queue<T>::push_heap(Iterator start, Iterator stop) {
...
}

为什么这不起作用?对于其余函数,我也会遇到相同类型的错误。

错误消息很清楚;降级和定义不匹配。 push_heap被声明为类模板Priority_queue的成员函数,但定义为类模板Priority_queue的成员函数模板

如何修复它取决于您的原始意图;您可以将声明更改为

template <class T>
class Priority_queue {
public:
    ...
    template <class Iterator>
    void push_heap(Iterator start, Iterator stop);
    ...
};

直播1

或将定义更改为

template <class T>
void Priority_queue<T>::push_heap(typename vector<T>::iterator start, typename vector<T>::iterator stop) {
...
}

直播2

最新更新