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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Решено: массив указателей на функции  (Прочитано 8225 раз)
VozaMFC
Гость
« : Январь 16, 2012, 14:50 »

ОООчень хочеться такой массив.
Вроде бы и связал функции в массиве, а вызвать не могу:

.cpp:14: error: must use '.*' or '->*' to call pointer-to-member function in 'func2 (...)', e.g. '(... ->* func2) (...)'

Создал мап членом класса
Код:
QMap<int, void (MainWindow::*)(int)>arrFunc; // на фукции которые принимают в параметр инт, например
у классе создал фукцию
Код:
void MainWindow::testInt(int a) { a = 12; }
в конструкторе класса MainWindow заполняю массив(карту функций так сказать) функций:
Код:
void (MainWindow::*funcInt)(int) = &MainWindow::testInt; // получаю как бы вроде указатель на фунцию
arrFunc[1] = funcInt;                                                    // тут буду хранить мои функции
//funcInt(12); // а как же ими пользоваться?? Если при компиляции компилятор выше  ругаеться...
« Последнее редактирование: Январь 23, 2012, 12:48 от VozaMFC » Записан
mutineer
Гость
« Ответ #1 : Январь 16, 2012, 14:52 »

Для вызова функции-члена через указатель на функцию нужен объект соответствующего класса

Либо сделай функцию статичной
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #2 : Январь 16, 2012, 14:55 »

вызывать методы надо через (this->*funcInt)(12). и такие сложные типы лучше объявлять через typedef:
Код
C++ (Qt)
typedef void (MainWindow::*MyCoolMethod)(int);
 
MyCoolMethod funcInt = &MainWindow::testInt;
(this->*funcInt)(12);
 
QMap<int, MyCoolMethod> arrFunc;
arrFunc[1] = funcInt;
(this->*arrFunc[1])(12);
« Последнее редактирование: Январь 16, 2012, 14:58 от kambala » Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
VozaMFC
Гость
« Ответ #3 : Январь 16, 2012, 15:51 »

Спасибо народ!
Уже начал было думать что без соответствующего класса или глобальных функций ну никак.

kambala большой тебе респект за предложенное решение и совет, все получилось!
Если честно, я в восторге  :-))))))
Записан
mutineer
Гость
« Ответ #4 : Январь 16, 2012, 15:55 »

Какбе совет камбалы тоже с "соответствующим классом"
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #5 : Январь 16, 2012, 16:33 »

Спасибо народ!
Уже начал было думать что без соответствующего класса или глобальных функций ну никак.

kambala большой тебе респект за предложенное решение и совет, все получилось!
Если честно, я в восторге  :-))))))
вообще говоря, прежде, чем лезть на форум с подобными вопросами, надо открыть книжку по плюсам или немного поспрашивать гугл
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
VozaMFC
Гость
« Ответ #6 : Январь 23, 2012, 12:52 »

Какбе совет камбалы тоже с "соответствующим классом"
Это получается выносить реализацию в отдельный класс и хранить указатели на функции данного класса...
Это немного мне не подходит.
Записан
mutineer
Гость
« Ответ #7 : Январь 23, 2012, 12:58 »

Какбе совет камбалы тоже с "соответствующим классом"
Это получается выносить реализацию в отдельный класс и хранить указатели на функции данного класса...
Это немного мне не подходит.

Твои методы - это члены класса MainWindow. Значит для их вызова нужен экземпляр класса MainWindow. Так как вызываешь ты эти методы в других методах MainWindow, то this как раз подходит на роль этого экземпляра
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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