Russian Qt Forum
Ноябрь 25, 2024, 05:49 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблемы с функтором.  (Прочитано 3312 раз)
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;
}
Записан
Fat-Zer
Гость
« Ответ #1 : Февраль 21, 2013, 07:15 »

linux/gcc-4.6.3: всё работает...
да и так всё вроде правильно...

почисти проект, попробуй сменить компилятор... может где-то прописаны кривые параметры компилятора/линкера...
Записан
fisenkdima
Гость
« Ответ #2 : Февраль 21, 2013, 07:39 »

Вот я тоже уже начал на это грешить. Спасибо, вы подтвердили мои подозрения, ибо подобная ошибка вылазит не в первый раз, и не только на функторы.
Записан
alexis031182
Гость
« Ответ #3 : Февраль 21, 2013, 09:49 »

Поправьте меня, если ошибаюсь, но это похоже не функтор, а просто переопределение оператора вызова.
Записан
fisenkdima
Гость
« Ответ #4 : Февраль 25, 2013, 07:43 »

Цитировать
Поправьте меня, если ошибаюсь, но это похоже не функтор, а просто переопределение оператора вызова.
Википедия сообщила мне, что функтор это класс с перегруженным оператором круглых скобок (ну и, на сколько я понял, без иных интерфейсов кроме конструктора и этих самых круглых скобок).
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.099 секунд. Запросов: 21.