Russian Qt Forum

Qt => Вопросы новичков => Тема начата: fisenkdima от Февраль 21, 2013, 06:55



Название: Проблемы с функтором.
Отправлено: fisenkdima от Февраль 21, 2013, 06:55
Недавно узнал, что в С++ существует такая клёвая штука, как функторы.
Решил потестить, да не очень вышло(
Код, если я все правильно понял, компилируется, но не линкуется.
Выдаёт следующую ошибку:

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;
}


Название: Re: Проблемы с функтором.
Отправлено: Fat-Zer от Февраль 21, 2013, 07:15
linux/gcc-4.6.3: всё работает...
да и так всё вроде правильно...

почисти проект, попробуй сменить компилятор... может где-то прописаны кривые параметры компилятора/линкера...


Название: Re: Проблемы с функтором.
Отправлено: fisenkdima от Февраль 21, 2013, 07:39
Вот я тоже уже начал на это грешить. Спасибо, вы подтвердили мои подозрения, ибо подобная ошибка вылазит не в первый раз, и не только на функторы.


Название: Re: Проблемы с функтором.
Отправлено: alexis031182 от Февраль 21, 2013, 09:49
Поправьте меня, если ошибаюсь, но это похоже не функтор, а просто переопределение оператора вызова.


Название: Re: Проблемы с функтором.
Отправлено: fisenkdima от Февраль 25, 2013, 07:43
Цитировать
Поправьте меня, если ошибаюсь, но это похоже не функтор, а просто переопределение оператора вызова.
Википедия сообщила мне, что функтор это класс с перегруженным оператором круглых скобок (ну и, на сколько я понял, без иных интерфейсов кроме конструктора и этих самых круглых скобок).