Я получаю ошибку компоновщика при создании этого кода:
Исключить.h файл
class IsExclude
{
public:
template<typename T>
bool operator()(const T* par);
virtual ~IsExclude() = 0;
};
IsExclude::~IsExclude() {}
class IsExcludeA : public IsExclude
{
public:
IsExcludeA(std::string toCompare) : toCompare_(toCompare) {}
template<typename T>
bool operator()(const T* par)
{
return strcmp(par->Something, toCompare_.c_str() ) ? false : true ;
}
~IsExcludeA() {}
private:
std::string toCompare_;
};
В том же файле:
/*
* loop over a container of function objects
* if at least one of them return true the function
* return true, otherwise false
* The function was designed to evaluate a set of
* exclusion rule put in "and" condition.
*/
template<typename T,typename P>
bool isExclude( const T& cont, const P* toCheck )
{
typename T::const_iterator pos;
typename T::const_iterator end(cont.end());
bool ret(false);
for (pos = cont.begin(); pos != end; ++pos)
{
if ( (*pos)->operator()(toCheck) == true )
{
ret = true;
pos = end;
}
}
return ret;
}
Файл cpp, в котором я использую предыдущий вызов, выглядит так:
std::vector<IsExclude* > exVector;
exVector.push_back( new IsExcludeA(std::string("A")) );
exVector.push_back( new IsExcludeA(std::string("B")) );
if (isExclude(exVector,asset) == false)
{
// Blah
}
Код компилируется нормально, но я получил ошибку от компоновщика:
Неопределенная первая ссылка
символ в файле
bool IsExclude :: operator () (const __type_0 *) MyFile.o
Есть ли у вас какие-либо подсказки или предложения?
P.S. Я знаю, что мне нужно очистить вектор, чтобы избежать утечки памяти. Я не могу использовать boost :: shared_ptr с моим компилятором. Вздох!