![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
AlexanderRufus |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 11.6.2006 Репутация: нет Всего: нет |
void func(int I, double Mas[]) //функция вне класса
{ //body function } void CLASS::FUNC(int I, double Mas[]) //функция в классе { //body function } class CLASS { //property public: void FUNC(int I,double Mas[]); void MAIN(); } void CLASS::MAIN() { //LibraryFunction - библиотечная функция LibraryFunction(func); //Все Ok! LibraryFunction(FUNC); //Error! } Почему функция вне класса передается удачно, а таже функция описанная в классе передается с ошибкой? Как эту ошибку устранить? |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Потому что это вовсе не та же функция.
У нее совершенно другой тип, а у указателя на нее может быть совершенно другой размер. Указатели на внешнюю функцию и на функцию-член не взаимозаменяемы: для вызова функции-члена требуется объект, для которого она вызывается. Добавлено @ 19:56 Если функцию FUNC можно объявить как статический член класса, то тогда все прокатит. -------------------- ... |
|||
|
||||
NextAlex |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 10.8.2005 Где: Украина, г. Одесс а Репутация: 2 Всего: 3 |
Вот очень неплохо описано как делается указатель на функцию - член класса
http://www.gamedev.ru/faq/?id=52 и Earnest права - если функция будет статическим членом класса, то всё прокатит, правда будут проблемы уже с обращением из неё к нестатическим членам класса, но например можно ей в качестве параметра передавать указатель на экземпляр класса, с которым она будет работать. Это сообщение отредактировал(а) NextAlex - 26.7.2006, 20:46 --------------------
Говорила мама: "Учись играть на скрипке". Не хотел носить ноты - будешь носить пианино ... |
|||
|
||||
Prehistorik |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 146 Регистрация: 30.5.2006 Где: СПб Репутация: 1 Всего: 3 |
Поправьте меня, если я не прав, но в члене-классе первым, невидимым параметром является указатель(ссылка) на объект.
--------------------
Есть только один бог - Ассемблер, и С - пророк его. |
|||
|
||||
NextAlex |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 10.8.2005 Где: Украина, г. Одесс а Репутация: 2 Всего: 3 |
Prehistorik, если бы это было сказано по русски я бы мог попытаться поправить
![]() что ты имел в виду ? --------------------
Говорила мама: "Учись играть на скрипке". Не хотел носить ноты - будешь носить пианино ... |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Prehistorik, ты прав:
В функции-члене класса первым невидимым аргументом является this. -------------------- ... |
|||
|
||||
NextAlex |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 10.8.2005 Где: Украина, г. Одесс а Репутация: 2 Всего: 3 |
Prehistorik Earnest, я с вами согласен полностью, но поясните если сможете как это может помочь в данном случае?
статические методы класса не могут использовать ни this ни любые другие методы, использующие this единственный путь - передавать в статическую функцию указатель на экземпляр класса --------------------
Говорила мама: "Учись играть на скрипке". Не хотел носить ноты - будешь носить пианино ... |
|||
|
||||
Prehistorik |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 146 Регистрация: 30.5.2006 Где: СПб Репутация: 1 Всего: 3 |
NextAlex, Я бы лучше сделал функцию враппер для функции класса.... Но это как-то криовато....
--------------------
Есть только один бог - Ассемблер, и С - пророк его. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |