![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Salatovec |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 213 Регистрация: 9.1.2008 Репутация: нет Всего: -1 |
Здравствуйте, столкнулся с такой проблемой, имеется код:
соответственно пытаюсь написать указатель на функцию класса А, а компилятор мне выдаёт "Call of nonfunction". Что я делаю не так? Заранее спасибо! |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
ну Вы ж сами написали что а функции члены вызываются только применительно к объекту Вобщем выглядеть может так :
|
|||
|
||||
| Salatovec |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 213 Регистрация: 9.1.2008 Репутация: нет Всего: -1 |
mes, спасибо это осознал =)
а как теперь функцию function класа А передать функцие call класса B? Нечто вроде:
|
|||
|
||||
| andrew_121 |
|
||||||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
или так:
хотя, по моему, я смысла не понял... Добавлено через 6 минут и 10 секунд ух ты да это прошлый век. нынче делается при помощи:
Это сообщение отредактировал(а) andrew_121 - 24.2.2010, 23:08 -------------------- Удалил аккаунт. Прощайте! |
||||||
|
|||||||
| bilbobagginz |
|
|||
![]() Naughtius Maximus ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8813 Регистрация: 2.3.2004 Где: Israel Репутация: 3 Всего: 317 |
насколько я помню доступ по умолчанию - private
ты хочешь "экспортнуть" приватный метод в чужой класс... по-моему это не должно работать, т.к. адрес функции должен быть как-то защищен. а с публичным методом - должно. возможно тебе не хватает ключевого слова public: ? а если private не защищен, то на кой этот долбанный c++ нужен ?! -------------------- Я ещё не демон. Я только учусь. |
|||
|
||||
| Salatovec |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 213 Регистрация: 9.1.2008 Репутация: нет Всего: -1 |
Функции естественно в паблик области, просто совершенно забыл это написать =(
Добавлено через 1 минуту и 25 секунд
Насколько я помню, в билдере нету библиотеки буст? Ибо пишу сейчас именно в нём. |
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
епс! вот я ступил... Добавлено через 47 секунд отставить холивар! -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
можно вначале классу B передать указатель (например через конструктор и запомнить), а потом вызывать call с нужной функцией или наоборот запомнить функцию, а передавать в call нужный указатель, в зависимости от того что требуется можно скомбинировать оба подохда, т.е запоминать и то и другое и вызывать когда требуется (отложенный вызов) - для этого лучше bind/function ну или простой вариант передавать и то и другое и сразу производить вызов - такой подход в предложенном мной варианте (хотя смысла в нем много не вижу, но для разбора пойдет) :
Добавлено @ 00:33 ну и без буста есть библиотеки такое реализующее из "маленьких" например : Winnie Closure, также упрощенный bind (аналог boost:bind) и не только они. Добавлено через 8 минут и 29 секунд кстати может Вам совсем и не это надо.. Если осветите для чего все это делается, думаю кто нибудь из форумчан подскажет правильный путь Это сообщение отредактировал(а) mes - 25.2.2010, 00:34 |
||||
|
|||||
| Salatovec |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 213 Регистрация: 9.1.2008 Репутация: нет Всего: -1 |
Нужно мне это по учебё, где дали задание "Реализовать два класса, один из которых содержит некую член-функцию, а второй содержит член-функцию, в которой используется функция первого класса. Передачу функции реализовать посредством указателя на функцию класса." |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
ну раз по учебе, значит так как сказали ну чтоб интересней было выполнять , можно например реализовать вызов функции по строковому имени, вот пример для допиливания http://codepad.org/7qHfLS7O |
|||
|
||||
| mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 2 Всего: 306 |
||||
|
||||
| Salatovec |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 213 Регистрация: 9.1.2008 Репутация: нет Всего: -1 |
mes, Спасибо огромное! =)
mrbrooks, 2007, всё никак не соберусь реинсталить на 2009 =( |
|||
|
||||
| bilbobagginz |
|
|||
![]() Naughtius Maximus ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8813 Регистрация: 2.3.2004 Где: Israel Репутация: 3 Всего: 317 |
секунда: т.е. если добавляешь public: - то до функции достукиваешься ? значит си++ "свою работу делает" понятненько. -------------------- Я ещё не демон. Я только учусь. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |