[an error occurred while processing this directive]
Как в С++ получить указатель на функцию, которая находится в классе?
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
Отправлено
=NIK=
09 августа 2006 г. 13:55
Составить ответ
|||
Конференция
|||
Архив
Ответы
Ответ: Указатель на член класса(+)
—
Concorde
(09.08.2006 21:21
83.237.240.142
, 455 байт)
Ответ: Ошибка(+)
—
Concorde
(09.08.2006 21:22
83.237.240.142
, 51 байт)
Ответ: Еще одна ошибка(+)
—
Concorde
(09.08.2006 21:24
83.237.240.142
, 133 байт)
только статический объект (функция-член) имеет указатель, который можно наружу передать
—
yes
(09.08.2006 18:14
87.236.81.130
, 312 байт)
&ObjectName::function()
—
ETM
(09.08.2006 14:03
62.117.85.87
,
пустое
)
Error[Pe276]: name followed by "::" must be a class or namespace name .... не работает :(
—
=NIK=
(09.08.2006 14:05
213.221.24.178
,
пустое
)
&ObjectName->function()
—
ETM
(09.08.2006 14:07
62.117.85.87
,
пустое
)
Error[Pe044]: expression must have pointer type ..... тоже не катит :(
—
=NIK=
(09.08.2006 14:08
213.221.24.178
,
пустое
)
А в левой части выражения у Вас что?
—
ETM
(09.08.2006 14:12
62.117.85.87
,
пустое
)
Мне в функцию надо передать указатель на функцию, так что я записываю то что вы мне пишете в качестве параметра функции... с обычными (не членами класса) функциями все прокатывает когда я пишу просто их имя...
—
=NIK=
(09.08.2006 14:15
213.221.24.178
,
пустое
)
(void *)&ObjectName->func или (YourTypeFunc *)&ObjectName->func ... В общем, проблемма с привидением типов.
—
ETM
(09.08.2006 14:20
62.117.85.87
,
пустое
)
Не работает... если я правильно понимаю, то "->" используется только для доступа к члену при использовании указателя на объект... а вот как получить адрес члена объекта - неизвесно... :(
—
=NIK=
(09.08.2006 14:30
213.221.24.178
,
пустое
)
Не могу играть в слепые шахматы.
—
ETM
(09.08.2006 14:32
62.117.85.87
,
пустое
)
Пример (+)
—
=NIK=
(09.08.2006 14:43
213.221.24.178
, 370 байт)
Все ясно: вместо "->" здесь нужно "."
—
ETM
(09.08.2006 14:47
62.117.85.87
,
пустое
)
Ответ:
—
ETM
(09.08.2006 14:55
62.117.85.87
, 531 байт)
Пробовал вот в таком варианте (+)
—
=NIK=
(09.08.2006 15:13
213.221.24.178
, 1171 байт)
Попробуйте так: (+)
—
ETM
(09.08.2006 15:25
62.117.85.87
, 267 байт)
Блин, поправка ....(+)
—
ETM
(09.08.2006 15:28
62.117.85.87
, 306 байт)
Еще одна (+)
—
ETM
(09.08.2006 15:33
62.117.85.87
, 371 байт)
Такой вариант (+)
—
=NIK=
(09.08.2006 15:40
213.221.24.178
, 619 байт)
Тумблер прав. Методы класса вызываются только в контексте объекта класса. Дурдом, пора создавать "Союз рыжих противников ООП"
—
ETM
(09.08.2006 15:49
62.117.85.87
,
пустое
)
Мне кажется что действительно нельзя в С++ получить адрес члена объекта класса :(
—
=NIK=
(09.08.2006 15:43
213.221.24.178
,
пустое
)
Я что-то не пойму.... у меня одного не работает такая штука? или просто никто не пробовал?
—
=NIK=
(09.08.2006 15:15
213.221.24.178
,
пустое
)
А как насчет такой реплики компилятора? Error[Pe300]: a pointer to a bound function may only be used to call the function
—
=NIK=
(09.08.2006 14:53
213.221.24.178
,
пустое
)
Перепробовал все варианты для "." результат отрицательный...
—
=NIK=
(09.08.2006 14:53
213.221.24.178
,
пустое
)
НУЖНО func(&LED_0.Toggle); ВМЕСТО func(&LED_0.Toggle());
—
ETM
(09.08.2006 15:11
62.117.85.87
,
пустое
)
(.... *)&(ObjectName->fun). Так попробуй. Или выложи тексты.
—
ETM
(09.08.2006 14:39
62.117.85.87
,
пустое
)
мне кажется что С++ вообще не позволяет получать адрес члена объекта класса...
—
=NIK=
(09.08.2006 14:46
213.221.24.178
,
пустое
)
"Изнутри" класса - можно:
—
Тумблер
(09.08.2006 14:50
213.234.205.46
, 210 байт)
Это я уже в книжке нашел.... :) но мне надо именно снаружи...
—
=NIK=
(09.08.2006 14:55
213.221.24.178
,
пустое
)
Изнутри можно. Я делал функцию, которая при запросе(снаружи) возвращает адрес функции. Объект снаружи в своем конструкторе запрашивает.
—
Михаил Е.
(09.08.2006 16:15
83.237.102.210
, 155 байт)
Так запрос выполняет тоже обект класса. Так лучше сразу вызвать метод.
—
ETM
(09.08.2006 16:25
62.117.85.87
,
пустое
)
В данном случае да, пример немного неудачный. Я запрашивал и снаружи.
—
Михаил Е.
(09.08.2006 16:32
83.237.102.210
,
пустое
)
Сразу вызвать нельзя.... я уже полдня бьюсь....
—
=NIK=
(09.08.2006 16:29
213.221.24.178
,
пустое
)
Видишь скоко неприятностей доставляет неоднозначность ++ даже самому разработчику класса. А если пишется библиотека классов для внешнего пользования? Да исчо с наследованием? В топку !!!!!!!!!!!!!!!!
—
ETM
(09.08.2006 16:38
62.117.85.87
,
пустое
)
Может быть действительно лучше будет если адрес вернет функция-член класса...
—
=NIK=
(09.08.2006 16:30
213.221.24.178
,
пустое
)
В какой ? (интересно).
—
Тумблер
(09.08.2006 14:57
213.234.205.46
, 5 байт)
У меня их две... :) Страуструп..... Г.Шилд
—
=NIK=
(09.08.2006 14:59
213.221.24.178
,
пустое
)
Может, все -таки где то ошибка ?
—
Тумблер
(09.08.2006 15:05
213.234.205.46
, 461 байт)
Имеется ввиду ошибка в целесообразности такого подхода?
—
=NIK=
(09.08.2006 15:18
213.221.24.178
,
пустое
)
В том числе. Противоречит концепции ООП."Блаженны прыгающие, ибо они допрыгаются".
—
Тумблер
(09.08.2006 15:32
213.234.205.46
, 564 байт)
Так staic -метод будет и роботать только со static-данными!
—
ETM
(09.08.2006 15:51
62.117.85.87
,
пустое
)
нет. Это не так.
—
Тумблер
(10.08.2006 15:15
213.234.205.46
,
пустое
)
Это все так.... но на практике есть функция которая может периодически вызывать другую функцию.... очень удобно можно моргать диодами, клацать ногами, опрашивать порты и т.д. Но вот только стоит эти функции загнать в классы то адрес ее уже не получить! И весь пряник оказывается испорченным :(
—
=NIK=
(09.08.2006 15:37
213.221.24.178
,
пустое
)
"Ты, братец, хочешь влезть в рот через жопу.... Не для того эти классы создавались...А задачу, про которую ты пишешь, можно элементарно решить и без классов....Зачем забивать гвоздь монитором - для этого же есть молоток"--------(C) Доктор ТуамОсес Inc.
—
ТуамОсес(который Доктор)
(09.08.2006 15:54
62.118.144.149
,
пустое
)
Красота теряется! КРАСОТА! это понятно что можно и через жопу сделать...
—
=NIK=
(09.08.2006 15:58
213.221.24.178
,
пустое
)
"Просто эти классы придуманы для решения другого круга задач и там они красивы {см.выше про забивание гвоздя}"--------(C) Доктор ТуамОсес Inc.
—
ТуамОсес(который Доктор)
(09.08.2006 16:02
62.118.145.237
,
пустое
)
Можешь мне конечно не верить, но если можно было бы взять такой адрес, то у меня в проге была бы КРАСОТА!!! :)
—
=NIK=
(09.08.2006 16:04
213.221.24.178
,
пустое
)
"Но это уже будет отсупление от объектно-ориентированной идеологии. Повторюсь: зачем забивать гвоздь {вашу задачу} монитором {через классы}? Не лучше ли взять для этого молоток?"--------(C) Доктор ТуамОсес Inc.
—
ТуамОсес(который Доктор)
(09.08.2006 16:27
62.118.144.73
,
пустое
)
Отправка ответа
Имя (обязательно):
Пароль:
E-mail:
Тема (обязательно):
Сообщение:
Ссылка на URL:
Название ссылки:
URL изображения:
Перейти к списку ответов
|||
Конференция
|||
Архив
|||
Главная страница
|||
Содержание