Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> функция в виде аргумента, адресация функций 
:(
    Опции темы
AlexanderRufus
Дата 26.7.2006, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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!
}

Почему функция вне класса передается удачно, а таже функция описанная в классе передается с ошибкой? Как эту ошибку устранить? 
PM MAIL   Вверх
Earnest
Дата 26.7.2006, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Потому что это вовсе не та же функция. 
У нее совершенно другой тип, а у указателя на нее может быть совершенно другой размер. 
Указатели на внешнюю функцию и на функцию-член не взаимозаменяемы: для вызова функции-члена требуется объект, для которого она вызывается.

Добавлено @ 19:56 
Если функцию FUNC можно объявить как статический член класса, то тогда все прокатит. 


--------------------
...
PM   Вверх
NextAlex
Дата 26.7.2006, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 10.8.2005
Где: Украина, г. Одесс а

Репутация: 2
Всего: 3



Вот очень неплохо описано как делается указатель на функцию - член класса
http://www.gamedev.ru/faq/?id=52 
и Earnest права - если функция будет статическим членом класса, то всё прокатит, правда будут проблемы уже с обращением из неё к нестатическим членам класса, но например можно ей в качестве параметра передавать указатель на экземпляр класса, с которым она будет работать. 

Это сообщение отредактировал(а) NextAlex - 26.7.2006, 20:46
--------------------
Говорила мама: "Учись играть на скрипке". Не хотел носить ноты - будешь носить пианино ...
PM MAIL ICQ   Вверх
Prehistorik
Дата 27.7.2006, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 146
Регистрация: 30.5.2006
Где: СПб

Репутация: 1
Всего: 3



Поправьте меня, если я не прав, но в члене-классе первым, невидимым параметром является указатель(ссылка) на объект. 
--------------------
Есть только один бог - Ассемблер, и С - пророк его. 
PM MAIL   Вверх
NextAlex
Дата 27.7.2006, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 10.8.2005
Где: Украина, г. Одесс а

Репутация: 2
Всего: 3



Prehistorik, если бы это было сказано по русски я бы мог попытаться поправить smile
что ты имел в виду ? 
--------------------
Говорила мама: "Учись играть на скрипке". Не хотел носить ноты - будешь носить пианино ...
PM MAIL ICQ   Вверх
Earnest
Дата 27.7.2006, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Prehistorik, ты прав:
В функции-члене класса первым невидимым аргументом является this.
 


--------------------
...
PM   Вверх
NextAlex
Дата 28.7.2006, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 10.8.2005
Где: Украина, г. Одесс а

Репутация: 2
Всего: 3



Prehistorik Earnest, я с вами согласен полностью, но поясните если сможете как это может помочь в данном случае?
статические методы класса не могут использовать ни this ни любые другие методы, использующие this
единственный путь - передавать в статическую функцию указатель на экземпляр класса 
--------------------
Говорила мама: "Учись играть на скрипке". Не хотел носить ноты - будешь носить пианино ...
PM MAIL ICQ   Вверх
Prehistorik
Дата 29.7.2006, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 146
Регистрация: 30.5.2006
Где: СПб

Репутация: 1
Всего: 3



NextAlex, Я бы лучше сделал функцию враппер для функции класса.... Но это как-то криовато.... 
--------------------
Есть только один бог - Ассемблер, и С - пророк его. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1033 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.