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

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

14.08.2009, 01:14. Просмотров 2002. Ответов 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.08.2009, 01:14
Ответы с готовыми решениями:

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

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

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

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

12
Почетный модератор
7321 / 2587 / 268
Регистрация: 29.07.2006
Сообщений: 13,582
14.08.2009, 02:09 2
насколько я помню, указателю возможно присвоить только static функцию из класса. Хотя, может, уже и не помню.
0
Временно недоступен
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
14.08.2009, 02:12 3
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
281 / 146 / 4
Регистрация: 11.07.2009
Сообщений: 606
14.08.2009, 09:54 4
Цитата Сообщение от Неумейка Посмотреть сообщение
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
инженер-системотехник
111 / 111 / 5
Регистрация: 10.03.2009
Сообщений: 533
14.08.2009, 10:07 5
А создавать объект класса c2 дядя будет?
0
depict1
281 / 146 / 4
Регистрация: 11.07.2009
Сообщений: 606
14.08.2009, 10:12 6
Цитата Сообщение от Haster Посмотреть сообщение
А создавать объект класса c2 дядя будет?
тётя и сыночек. В чём проблема? Я где-то ошибся?
0
инженер-системотехник
111 / 111 / 5
Регистрация: 10.03.2009
Сообщений: 533
14.08.2009, 10:37 7
zim22, вопрос адресован не тебе, а Неумейке.
0
depict1
281 / 146 / 4
Регистрация: 11.07.2009
Сообщений: 606
14.08.2009, 10:48 8
Цитата Сообщение от Haster Посмотреть сообщение
вопрос адресован не тебе, а Неумейке.
ок. даже если бы объект класса c2 был создан. чтобы это изменило?
0
инженер-системотехник
111 / 111 / 5
Регистрация: 10.03.2009
Сообщений: 533
14.08.2009, 11:07 9
Да особо ничего, но было бы правильней создавать объект класса прежде чем обращаться к его аргументам ))
0
depict1
281 / 146 / 4
Регистрация: 11.07.2009
Сообщений: 606
14.08.2009, 11:13 10
Haster, обрати внимание ещё раз на код. а именно: на 11 строчку.
видишь троеточие?
0
инженер-системотехник
111 / 111 / 5
Регистрация: 10.03.2009
Сообщений: 533
14.08.2009, 11:29 11
zim22, обрати внимание, что fp - закрытый член класса, а ему пытаются присвоить указатель на функцию... Тут вообще один большой косяк
0
554 / 508 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
14.08.2009, 11:41 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 (*)()'
помогите понять что не так!
а copy-paste не работает? код нужно приводить аккуратно, а не хип-хап. или вас такой же "хип-хап" ответ устроит?
0
12 / 11 / 4
Регистрация: 14.02.2009
Сообщений: 89
14.08.2009, 13:36  [ТС] 13
Ок ,с тем разобрался, таки да указатель на функцию и указатель на функцию-член это разные вещи, to zim22 пасибо. и еще вопросик по поводу указателей, есть три объекта экземпляры разных классов: ob1, в нутрии ob1 создается ob2, в нутрии ob2 создается obX. Как из другого класс, имея указатель на ob1, получить доступ к членам ob3 сделал что-то типа такого: ob1->ob2->obX->foo(); выдает ошибку illegal use of incomplete struct/union/class , и еще один нюанс почему не могу использовать указатель на функцию-член, потому что объект obX это разные объекты в разные моменты времени(они должны меняться динамически таймером, один obХ удаляется другой obX создается) в общем закрутил так что не могу разобраться.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.08.2009, 13:36

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

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

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

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

Указатель на объект из указателя на член класса
Что как-то сей вопрос ставит меня в тупик. class A { int i; } obj; int main()

Указатель на функцию член
Вот урезаный донельзя код: class Window { public: ... bool registerClassEx()


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.