1
我正在爲支持decPrio操作的堆編寫代碼。但是當我使用代碼時,我遇到了無法解析的外部符號錯誤。VS2010中無法解析的外部符號
template< typename PRIO, typename VALUE>
class Node;
template< typename PRIO, typename VALUE, typename CMP = std::less<PRIO> >
class FibonacciHeap{
//Interface:
//a typedef for a type "item", which acts as a pointer to an element in the queue
//(item is used below in various methods).
public:
typedef Node<PRIO,VALUE>* item;
typedef int size_t;
CMP cmp;
private:
item m_roots;
int item_count;
public:
void decPrio(item it, const PRIO &prio);
item insert(const PRIO &prio, const VALUE &value);
private:
void link(item x,item y);
void cut(item x,item y);
void cascadeCut(item y);
};
template< typename PRIO, typename VALUE>
class Node{
friend class FibonacciHeap<PRIO,VALUE>;
int degree;
bool marked;
Node<PRIO,VALUE>* parent;
Node<PRIO,VALUE>* child;
Node<PRIO,VALUE>* left;
Node<PRIO,VALUE>* right;
public:
PRIO prio;
VALUE value;
Node(PRIO p,VALUE v) :
degree(0),marked(0), parent(NULL),child(NULL),left(NULL),right(NULL),prio(p),value(v) {}
};
template<typename PRIO,typename VALUE,typename CMP>
void decPrio(typename FibonacciHeap<PRIO,VALUE,CMP>::item it, const PRIO &prio)
{
if(m_roots==NULL)
return;
if(it==NULL)
return;
if(!cmp(prio,it->prio))
return;
it->prio=prio;
item y =it->parent;
if(y!=NULL && cmp(it->prio,y->prio))
{
cut(it,y);
cascadeCut(y);
}
if(cmp(it->prio,m_roots->prio))
m_roots=it;
}
這裏是我的主要代碼
#include<stdio.h>
#include "myfib.h"
using namespace std;
int main(){
FibonacciHeap<int,int> f;
FibonacciHeap<int,int>::item temp;
temp=f.insert(30,1);
f.decPrio(temp,2);
return 0;
}
我收到錯誤消息:
錯誤LNK2019:無法解析的外部符號 「市民:無效__thiscall FibonacciHeap<int,int,struct std::less<int> >::decPrio(class Node<int,int> *,int const &)
」?(decPrio @ $斐波那契堆@ HHU?$ @少H + STD @@@@ QAEXPAV?$ @節點HH @@ ABH @ Z)的函數引用_main
明白了。這是一個愚蠢的錯誤。 –