Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.71/35: Рейтинг темы: голосов - 35, средняя оценка - 4.71
1 / 1 / 0
Регистрация: 26.10.2014
Сообщений: 74
1

Указатель на функцию из другого класса

11.02.2016, 17:51. Показов 7112. Ответов 21
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день!
Есть класс Frame, который в конструкторе принимает указатель на функцию типа bool:
Frame.h:
C++ (Qt)
1
2
3
4
5
6
class Frame
{
public:
    Frame(bool (*)());
    bool (*FrameFunc)();
};
Frame.cpp:
C++ (Qt)
1
2
3
4
Frame::Frame(bool (*F)())
{
    FrameFunc = F;
}
Есть также класс А, в котором содержится некая функция myFunction:
A.h:
C++ (Qt)
1
2
3
4
5
6
class A
{
public:
    A();
    bool myFunction();
};
Эта функция, вроде бы, удовлетворяет сигнатуре принимаемой функции в конструкторе класса Frame:
A.cpp:
C++ (Qt)
1
2
3
4
5
bool A::myFunction()
{
    cout<<"From A";
    return 1;
}
Если в main-е я ссылаюсь на какую-то локальную функцию с такой же сигнатурой, то проблем нет, компилятор не ругается. Если же я пишу:
main.cpp:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
bool LocalFunc()
{
    cout<<"From main"<<endl;
    return 1;
}
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    //Frame fr= (&LocalFunc);//эта строка компилируется без ошибок
    Frame fr= Frame(&A::myFunction);//!!!
    fr.FrameFunc();
    return a.exec();
}
ошибка: "no matching function for call to 'Frame::Frame(bool (A::*)()"

Подскажите, пожалуйста, как исправить ошибку? как действовать в этой ситуации?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.02.2016, 17:51
Ответы с готовыми решениями:

Как связать сигнал одного класса со слотом другого класса, содержащего указатель на объект этого класса?
Подскажите, пожалуйста, как связать сигнал одного класса со слотом другого класса, содержащего...

Спрятать указатель на функцию класса в map и вызвать из другого объекта
Товарищи, пишу примитивный &quot;tcp-сервер&quot;. В его задачи входит принятие соединений и получение...

Использование в качестве поля класса указатель на объект другого класса
Ошибка в названии - &quot;указателЯ&quot; Вот, пытаюсь освоить ООП (пока только учусь): создаю класс...

Функция, получающая указатель на обычную функцию, получает указатель на метод класса
Здравтсвуйте. Имеется вопрос по указателям на методы класса. Допустим, есть функция( f ), которая...

21
487 / 365 / 93
Регистрация: 10.03.2011
Сообщений: 1,513
Записей в блоге: 5
14.02.2016, 05:18 21
Author24 — интернет-сервис помощи студентам
ctakah3112, можно было понять по дальнейшему использованию. тип bool(Item::*)(); псевдоним sweetCall
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 1
15.02.2016, 15:37 22
Цитата Сообщение от ctakah3112 Посмотреть сообщение
Где оригинальный тип а где его псевдоним?
sweetCall теперь - это псевдоним (typedef name) типа
указатель на не константную функцию-член класса Item,
которая может выбросить любое исключение,
не принимает параметров(ну, окромя this) и возвращает bool.
0
15.02.2016, 15:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.02.2016, 15:37
Помогаю со студенческими работами здесь

Получить указатель на окно верхнего уровня из другого класса
Всем привет! Могу путаться в терминологии, поправьте если что-) Необходимо получить указатель на...

Работа с классами (в главном классе создать указатель на экземпляр другого класса)
Недавно начал изучение С++, в частности ООП. В связи с чем у меня есть вопрос как в главном классе...

Переменные из функции класса в функцию другого класса
Подскажи пожалуйста,как с класса Convector передать в класс Filter одержанный Bitmap и переменные?...

Как передать функцию из другого класса в функцию glutSpecialFunc() которая находится в main?
В программе которая двигает нарисованную мною фигуру в OpenGl, есть функция регистрации нажатия...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru