我有兩個模板類:問題與模板方法定義 - 錯誤C2244:無法函數定義匹配現有的聲明
template<typename D, typename V, typename Comp>
class pQueueNodeComp;
和:
template <typename D, typename V, typename Comp>
class pQueueComp;
裏面pQueueComp
我有一個方法聲明因此:
這裏的定義:
template <typename D, typename V, typename Comp>
pQueueNodeComp<D, V, Comp>* pQueueComp<D, V, Comp>::lowest() {
return binaryHeap[0]; //binaryHeap is a vector<pQueueNodeComp<D, V, Comp>*>
}
我越來越對的Visual Studio 2015年以下錯誤:
1>d:\github\pqueue\pqueue\pqueuecomp.h(163): error C2244: 'pQueueComp<D,V,Comp>::lowest': unable to match function definition to an existing declaration
1> d:\github\pqueue\pqueue\pqueuecomp.h(161): note: see declaration of 'pQueueComp<D,V,Comp>::lowest'
1> d:\github\pqueue\pqueue\pqueuecomp.h(163): note: definition
1> d:\github\pqueue\pqueue\pqueuecomp.h(163): note: 'pQueueNodeComp<D,V,Comp> *pQueueComp<D,V,Comp>::lowest(void)'
1> d:\github\pqueue\pqueue\pqueuecomp.h(163): note: existing declarations
1> d:\github\pqueue\pqueue\pqueuecomp.h(163): note: 'pQueueNodeComp<D,V,Comp> *pQueueComp<D,V,Comp>::lowest(void)'
在我看來像聲明的定義相匹配。我瘋了嗎?
編輯:類和方法的定義在同一個文件中。
EDIT2:這裏是pQueueComp
完整定義:
template <typename V, typename D, typename Comp>
class pQueueComp {
public:
pQueueComp(Comp _cmp) :
cmp(_cmp)
{};
pQueueNodeComp<D, V,Comp>* add(const D& data, V value);
pQueueNodeComp<D, V,Comp>* lowest();
void removeLowest();
int size() { return binaryHeap.size(); };
~pQueueComp();
pQueueComp() {};
pQueueComp(const pQueueComp&) = delete; /*out of the scope of this project*/
pQueueComp& operator=(const pQueueComp&) = delete;
void print();
private:
Comp cmp;
std::vector<pQueueNodeComp<D, V, Comp>*> binaryHeap;
void changeValue(int rank, V newValue);
void goDown(int rank);
void goUp(int rank);
void swap(int rank1, int rank2);
int parent(int i) { return (i + 1)/2 - 1; };
int child1(int i) { return 2 * (i + 1) - 1; }
int child2(int i) { return 2 * (i + 1); }
friend class pQueueNodeComp<D, V, Comp>;
};
我在與
lowest
和
add
問題
。
您的decleration的模板化類型屬於對其進行實例化的類,但定義是使用新的類型 – ZivS
@ Rakete1111,可能不是重複的。他提到類和方法的定義在同一個文件中。 –
你的班級裏有一些'使用'/'typedef'嗎? – Jarod42