2014-04-01 58 views
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

回答

0
template<typename PRIO,typename VALUE,typename CMP> 
void decPrio(typename FibonacciHeap<PRIO,VALUE,CMP>::item it, const PRIO &prio) 
{ 

應該是

template<typename PRIO,typename VALUE,typename CMP> 
void FibonacciHeap<PRIO,VALUE,CMP>::decPrio(Node<PRIO,VALUE>* it, const PRIO &prio) 
{ 
+0

明白了。這是一個愚蠢的錯誤。 –