我收到以下类型的链接错误:
Festival.obj:错误LNK2019:函数__catch$中引用的未解析外部符号“public:void __thiscall Tree::add(class Price &)”(?add@?$Tree@VPrice@@@@QAEXAAVPrice@@@Z)? AddBand@Festival@@QAE?AW4StatusType@@HHH@Z$0
我曾经认为它与 try-catch 机制有关,但后来被告知并非如此。这是问题的更新版本。
我正在使用 Visual Studio 2008,但我在 g++ 中有类似的问题。
相关代码:
在 Festival.cpp
#include "Tree.h"
#include <exception>
using namespace std;
class Band{
public:
Band(int bandID, int price, int votes=0): bandID(bandID), price(price), votes(votes){};
...
private:
...
};
class Festival{
public:
Festival(int budget): budget(budget), minPrice(0), maxNeededBudget(0), priceOffset(0), bandCounter(0){};
~Festival();
StatusType AddBand(int bandID, int price, int votes=0);
...
private:
Tree<Band> bandTree;
...
};
StatusType Festival::AddBand(int bandID, int price, int votes){
if ((price<0)||(bandID<0)){
return INVALID_INPUT;
}
Band* newBand=NULL;
try{
newBand=new Band(bandID,price-priceOffset,votes);
}
catch(bad_alloc&){return ALLOCATION_ERROR;}
if (bandTree.find(*newBand)!=NULL){
delete newBand;
return FAILURE;
}
bandTree.add(*newBand);
....
}
在 Tree.h 中:
template<class T>
class Tree{
public:
Tree(T* initialData=NULL, Tree<T>* initialFather=NULL);
void add(T& newData);
....
private:
....
};
有趣的是,当类型 T 是像 int 这样的原始类型时,当我尝试使用 Tree 函数时,我没有出现链接错误。