Недавно узнал, что в С++ существует такая клёвая штука, как функторы.
Решил потестить, да не очень вышло(
Код, если я все правильно понял, компилируется, но не линкуется.
Выдаёт следующую ошибку:
main.obj:-1: error: LNK2019: ссылка на неразрешенный внешний символ "public: int __thiscall GeneratorOfBits::operator()(int)" (??RGeneratorOfBits@@QAEHH@Z) в функции _mainРугается, как вы могли заметить, на класс GeneratorOfBits. Теста ради создал ещё один, практически идентичный функтор, который, по идее, также должен был стать причиной подобной ошибки, но нет! С ним одним проект собирается без каких-либо проблем.
Люди добрые, помогите понять, в каком месте я ошибаюсь.
Если кому-то так будет удобнее, то вот сохранённый проект:
https://dl.dropbox.com/u/102021951/untitled1.zipА вот его код:
main.cpp:#include <QCoreApplication>
#include <QDebug>
#include "functor1.h"
#include "generatorofbits.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
functor1 functor;
qDebug()<<functor(1);
GeneratorOfBits gen1;
qDebug()<<gen1(1);
return a.exec();
}
functor1.h (этот класс работает корректно):#ifndef FUNCTOR1_H
#define FUNCTOR1_H
class functor1
{
public:
bool operator ()(int i);
};
#endif // FUNCTOR1_H
functor1.cpp#include "functor1.h"
bool functor1::operator ()(int i)
{
if(i==1)
{
return true;
}
return false;
}
generatorofbits.h (а вот с этим функтором проблемы):#ifndef GENERATOROFBITS_H
#define GENERATOROFBITS_H
class GeneratorOfBits
{
public:
int operator ()( int lengthOfKeyCurrent );
};
#endif // GENERATOROFBITS_H
generatorofbits.cpp#include "generatorofbits.h"
int GeneratorOfBits::operator ()(int lengthOfKeyCurrent )
{
return 1;
}