Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/12: Рейтинг темы: голосов - 12, средняя оценка - 4.50
 Аватар для Неумейка
12 / 11 / 4
Регистрация: 14.02.2009
Сообщений: 89

Указатель на функцию - член класса.

14.08.2009, 01:14. Показов 2683. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
делаю так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
class c1
{
void foo();
}
 
class c2
{
void (*fp)();
}
...
c1 ob =new c1();
fp=ob->foo;
выдает ошибку: illegal implicit conversion from 'void (*)()' to 'void (*)()'
помогите понять что не так!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.08.2009, 01:14
Ответы с готовыми решениями:

Указатель на функцию-член класса
Нужно передать указатель на функцию класса A изнутри самого класса А в функцию, в качестве аргумента классу B. #include...

std::bind и указатель на статическую функцию член класса
Биндинг простых функций класса-это понятно, а вот как быть, если функция статическая?

Указатель на функцию-член одного класса в другом классе - C++
Добрый вечер! Может кто-то может помочь с проблемой. class Cook { public: void _cook_dish(Dish cook_dish_id) { ... ...

12
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
14.08.2009, 02:09
насколько я помню, указателю возможно присвоить только static функцию из класса. Хотя, может, уже и не помню.
0
Временно недоступен
 Аватар для #pragma
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
14.08.2009, 02:12
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class c1
{
    public:
            int foo(){return 0;};
};
class c2
{
    public:
            int (*fp)();
};
int main()
{
     c2 obj;
     c1 *ob =new c1();
     obj.fp=(int(*)())ob->foo();
     return 0;
}
Вот это работает,но что было не так,точно не знаю Вот без классов всё ок.
0
depict1
 Аватар для zim22
281 / 146 / 4
Регистрация: 11.07.2009
Сообщений: 606
14.08.2009, 09:54
Цитата Сообщение от Неумейка Посмотреть сообщение
fp=ob->foo;
здесь вы хотите связать указатель на функцию с адресом функции-члена.
для этой цели существуют указатели на функции-члены.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class C1 {
public:
  void do_some_work() {}
};
 
class C2 {
public:
  C2() : f1(&C1::do_some_work) { }
  void run() {
    (obj.*f1)();
  }
private:
  typedef void (C1::*fcn)();
  fcn f1;
  C1 obj;
};
 
int main()
{
  C2 c;
  c.run();
}
1
инженер-системотехник
 Аватар для Haster
111 / 111 / 5
Регистрация: 10.03.2009
Сообщений: 533
14.08.2009, 10:07
А создавать объект класса c2 дядя будет?
0
depict1
 Аватар для zim22
281 / 146 / 4
Регистрация: 11.07.2009
Сообщений: 606
14.08.2009, 10:12
Цитата Сообщение от Haster Посмотреть сообщение
А создавать объект класса c2 дядя будет?
тётя и сыночек. В чём проблема? Я где-то ошибся?
0
инженер-системотехник
 Аватар для Haster
111 / 111 / 5
Регистрация: 10.03.2009
Сообщений: 533
14.08.2009, 10:37
zim22, вопрос адресован не тебе, а Неумейке.
0
depict1
 Аватар для zim22
281 / 146 / 4
Регистрация: 11.07.2009
Сообщений: 606
14.08.2009, 10:48
Цитата Сообщение от Haster Посмотреть сообщение
вопрос адресован не тебе, а Неумейке.
ок. даже если бы объект класса c2 был создан. чтобы это изменило?
0
инженер-системотехник
 Аватар для Haster
111 / 111 / 5
Регистрация: 10.03.2009
Сообщений: 533
14.08.2009, 11:07
Да особо ничего, но было бы правильней создавать объект класса прежде чем обращаться к его аргументам ))
0
depict1
 Аватар для zim22
281 / 146 / 4
Регистрация: 11.07.2009
Сообщений: 606
14.08.2009, 11:13
Haster, обрати внимание ещё раз на код. а именно: на 11 строчку.
видишь троеточие?
0
инженер-системотехник
 Аватар для Haster
111 / 111 / 5
Регистрация: 10.03.2009
Сообщений: 533
14.08.2009, 11:29
zim22, обрати внимание, что fp - закрытый член класса, а ему пытаются присвоить указатель на функцию... Тут вообще один большой косяк
0
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
14.08.2009, 11:41
Цитата Сообщение от Неумейка Посмотреть сообщение
делаю так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
class c1
{
void foo();
}
 
class c2
{
void (*fp)();
}
...
c1 ob =new c1();
fp=ob->foo;
выдает ошибку: illegal implicit conversion from 'void (*)()' to 'void (*)()'
помогите понять что не так!
а copy-paste не работает? код нужно приводить аккуратно, а не хип-хап. или вас такой же "хип-хап" ответ устроит?
0
 Аватар для Неумейка
12 / 11 / 4
Регистрация: 14.02.2009
Сообщений: 89
14.08.2009, 13:36  [ТС]
Ок ,с тем разобрался, таки да указатель на функцию и указатель на функцию-член это разные вещи, to zim22 пасибо. и еще вопросик по поводу указателей, есть три объекта экземпляры разных классов: ob1, в нутрии ob1 создается ob2, в нутрии ob2 создается obX. Как из другого класс, имея указатель на ob1, получить доступ к членам ob3 сделал что-то типа такого: ob1->ob2->obX->foo(); выдает ошибку illegal use of incomplete struct/union/class , и еще один нюанс почему не могу использовать указатель на функцию-член, потому что объект obX это разные объекты в разные моменты времени(они должны меняться динамически таймером, один obХ удаляется другой obX создается) в общем закрутил так что не могу разобраться.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.08.2009, 13:36
Помогаю со студенческими работами здесь

Не могу создать указатель на перегруженную функцию-член класса
Есть функция монстр из vulkan api. Она является членом класса. Просто написать её название не получается, потому что она перегружена. Каким...

Как создать указатель на функцию-член класса и вызвать его?
Подскажите как правильно сделать, а в дальнейшем вызвать указатель на функцию член класса: #include "stdafx.h" #include...

Указатель на член структуры/класса
Всем привет! Помогите разобраться. Пусть есть такой код: template <typename Type> class DynamicQueue { private: class Node { ...

Указатель на ф-цию член класса
Чёрная магия или я бот? g++ sub.cpp:21: error: expected unqualified-id before ‘*’ token sub.cpp:21: error: must use ‘.*’ or...

Что такое указатель на член класса?
Что такое указатель на член класса?


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru