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

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

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

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

14.08.2009, 01:14. Просмотров 1547. Ответов 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++
Нужно передать указатель на функцию класса A изнутри самого класса А в функцию, в качестве аргумента классу B. #include <Windows.h>...

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

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Vourhey
Почетный модератор
6478 / 2253 / 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 не работает? код нужно приводить аккуратно, а не хип-хап. или вас такой же "хип-хап" ответ устроит?
Неумейка
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 создается) в общем закрутил так что не могу разобраться.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.08.2009, 13:36
Привет! Вот еще темы с ответами:

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

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

Указатель на функцию-член - C++
// howmany.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" #include <iostream> #include <conio.h>...

Указатель на функцию-член - C++
Имеем следующий код: #include <iostream> using namespace std; class Windows { public: void OpenWindows() { cout << "Open...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
14.08.2009, 13:36
Ответ Создать тему
Опции темы

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