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

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

14.08.2009, 01:14. Просмотров 1756. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.08.2009, 01:14
Ответы с готовыми решениями:

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

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

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

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

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

12
Vourhey
Почетный модератор
6492 / 2266 / 185
Регистрация: 29.07.2006
Сообщений: 12,534
14.08.2009, 02:09 2
насколько я помню, указателю возможно присвоить только static функцию из класса. Хотя, может, уже и не помню.
0
#pragma
Временно недоступен
955 / 226 / 14
Регистрация: 12.04.2009
Сообщений: 925
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
zim22
depict1
276 / 141 / 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
Haster
инженер-системотехник
111 / 110 / 5
Регистрация: 10.03.2009
Сообщений: 533
14.08.2009, 10:07 5
А создавать объект класса c2 дядя будет?
0
zim22
depict1
276 / 141 / 4
Регистрация: 11.07.2009
Сообщений: 606
14.08.2009, 10:12 6
Цитата Сообщение от Haster Посмотреть сообщение
А создавать объект класса c2 дядя будет?
тётя и сыночек. В чём проблема? Я где-то ошибся?
0
Haster
инженер-системотехник
111 / 110 / 5
Регистрация: 10.03.2009
Сообщений: 533
14.08.2009, 10:37 7
zim22, вопрос адресован не тебе, а Неумейке.
0
zim22
depict1
276 / 141 / 4
Регистрация: 11.07.2009
Сообщений: 606
14.08.2009, 10:48 8
Цитата Сообщение от Haster Посмотреть сообщение
вопрос адресован не тебе, а Неумейке.
ок. даже если бы объект класса c2 был создан. чтобы это изменило?
0
Haster
инженер-системотехник
111 / 110 / 5
Регистрация: 10.03.2009
Сообщений: 533
14.08.2009, 11:07 9
Да особо ничего, но было бы правильней создавать объект класса прежде чем обращаться к его аргументам ))
0
zim22
depict1
276 / 141 / 4
Регистрация: 11.07.2009
Сообщений: 606
14.08.2009, 11:13 10
Haster, обрати внимание ещё раз на код. а именно: на 11 строчку.
видишь троеточие?
0
Haster
инженер-системотехник
111 / 110 / 5
Регистрация: 10.03.2009
Сообщений: 533
14.08.2009, 11:29 11
zim22, обрати внимание, что fp - закрытый член класса, а ему пытаются присвоить указатель на функцию... Тут вообще один большой косяк
0
novi4ok
551 / 504 / 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
14.08.2009, 13:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.08.2009, 13:36

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

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

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


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

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

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