Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.92
Неумейка
12 / 11 / 2
Регистрация: 14.02.2009
Сообщений: 89
#1

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

14.08.2009, 01:14. Просмотров 1513. Ответов 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 (*)()'
помогите понять что не так!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.08.2009, 01:14     Указатель на функцию - член класса.
Посмотрите здесь:
Указатель на функцию-член класса C++
C++ std::bind и указатель на статическую функцию член класса
Указатель на функцию-член одного класса в другом классе - C++ C++
Как создать указатель на функцию-член класса и вызвать его? C++
Указатель на ф-цию член класса C++
C++ Указатель на член структуры/класса
C++ Что такое указатель на член класса?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6474 / 2249 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
14.08.2009, 02:09     Указатель на функцию - член класса. #2
насколько я помню, указателю возможно присвоить только static функцию из класса. Хотя, может, уже и не помню.
#pragma
Временно недоступен
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921
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;
}
Вот это работает,но что было не так,точно не знаю Вот без классов всё ок.
zim22
depict1
276 / 141 / 2
Регистрация: 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();
}
Haster
инженер-системотехник
109 / 108 / 2
Регистрация: 10.03.2009
Сообщений: 533
14.08.2009, 10:07     Указатель на функцию - член класса. #5
А создавать объект класса c2 дядя будет?
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
14.08.2009, 10:12     Указатель на функцию - член класса. #6
Цитата Сообщение от Haster Посмотреть сообщение
А создавать объект класса c2 дядя будет?
тётя и сыночек. В чём проблема? Я где-то ошибся?
Haster
инженер-системотехник
109 / 108 / 2
Регистрация: 10.03.2009
Сообщений: 533
14.08.2009, 10:37     Указатель на функцию - член класса. #7
zim22, вопрос адресован не тебе, а Неумейке.
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
14.08.2009, 10:48     Указатель на функцию - член класса. #8
Цитата Сообщение от Haster Посмотреть сообщение
вопрос адресован не тебе, а Неумейке.
ок. даже если бы объект класса c2 был создан. чтобы это изменило?
Haster
инженер-системотехник
109 / 108 / 2
Регистрация: 10.03.2009
Сообщений: 533
14.08.2009, 11:07     Указатель на функцию - член класса. #9
Да особо ничего, но было бы правильней создавать объект класса прежде чем обращаться к его аргументам ))
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
14.08.2009, 11:13     Указатель на функцию - член класса. #10
Haster, обрати внимание ещё раз на код. а именно: на 11 строчку.
видишь троеточие?
Haster
инженер-системотехник
109 / 108 / 2
Регистрация: 10.03.2009
Сообщений: 533
14.08.2009, 11:29     Указатель на функцию - член класса. #11
zim22, обрати внимание, что fp - закрытый член класса, а ему пытаются присвоить указатель на функцию... Тут вообще один большой косяк
novi4ok
551 / 504 / 8
Регистрация: 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 не работает? код нужно приводить аккуратно, а не хип-хап. или вас такой же "хип-хап" ответ устроит?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.08.2009, 13:36     Указатель на функцию - член класса.
Еще ссылки по теме:
C++ Указатель на объект из указателя на член класса
Указатель на функцию член C++
указатель на функцию-член! C++
Указатель на функцию-член C++
Указатель на функцию-член C++

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

Или воспользуйтесь поиском по форуму:
Неумейка
12 / 11 / 2
Регистрация: 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 создается) в общем закрутил так что не могу разобраться.
Yandex
Объявления
14.08.2009, 13:36     Указатель на функцию - член класса.
Ответ Создать тему
Опции темы

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