![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| fear |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 16.4.2006 Репутация: 1 Всего: 1 |
Следующий код выводит надпись "writeFunc"
А этот, ошибку компилятора "error C3867: 'A::readFunc': function call missing argument list; use '&A::readFunc' to create a pointer to member"
Почему так? |
||||
|
|||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Тебе же все написали. Чтобы взять адрес метода класса, нужно использовать операцию: &ClassName::methodName;
А чтобы его использовать: a.*methodName() или a->*methodName(); А чтобы описать указатель на член класса: type (*ClassName::func)(<params>); Например:
|
|||
|
||||
| Xenon |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
bsa, только
И
|
||||
|
|||||
| sparn |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 11.5.2006 Репутация: нет Всего: 1 |
в первом слу
В первом случае передаваемая в качестве параметра функция является статической - то есть она существует всегда(образно говоря Это сообщение отредактировал(а) sparn - 19.6.2007, 12:20 |
|||
|
||||
| Xenon |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
То что мы называем указателем на член по сути является смещением.
|
|||
|
||||
| fear |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 16.4.2006 Репутация: 1 Всего: 1 |
Изменил код, получил ошибку в последней строке "error C2065: 'readWriteFunc' : undeclared identifier".
|
|||
|
||||
| likehood |
|
|||
|
666 ![]() ![]() Профиль Группа: Участник Сообщений: 536 Регистрация: 21.12.2005 Репутация: 8 Всего: 24 |
Судя по твоему первому посту, тебе нужен такой код:
|
|||
|
||||
| bsa |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Сорри. Использовал только пару раз, поэтому подзабыл fear Измени код вызова на: (a.*(a.readWriteFunc))(); Я немного запутал всех. readWriteFunc - это же член класса. Поэтому сначала его надо извлечь, а затем уже применять вызов. Если бы у тебе readWriteFunc был просто в main() объявлен, то все бы работало. |
||||||
|
|||||||
| fear |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 16.4.2006 Репутация: 1 Всего: 1 |
Спасибо всем большое за разъяснения. Теперь всё встало на свои места.
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |