| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > функция в виде аргумента |
| Автор: AlexanderRufus 26.7.2006, 19:44 |
| 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 26.7.2006, 19:54 |
| Потому что это вовсе не та же функция. У нее совершенно другой тип, а у указателя на нее может быть совершенно другой размер. Указатели на внешнюю функцию и на функцию-член не взаимозаменяемы: для вызова функции-члена требуется объект, для которого она вызывается. Добавлено @ 19:56 Если функцию FUNC можно объявить как статический член класса, то тогда все прокатит. |
| Автор: NextAlex 26.7.2006, 20:40 |
| Вот очень неплохо описано как делается указатель на функцию - член класса http://www.gamedev.ru/faq/?id=52 и Earnest права - если функция будет статическим членом класса, то всё прокатит, правда будут проблемы уже с обращением из неё к нестатическим членам класса, но например можно ей в качестве параметра передавать указатель на экземпляр класса, с которым она будет работать. |
| Автор: Prehistorik 27.7.2006, 09:03 |
| Поправьте меня, если я не прав, но в члене-классе первым, невидимым параметром является указатель(ссылка) на объект. |
| Автор: NextAlex 27.7.2006, 09:13 |
| Prehistorik, если бы это было сказано по русски я бы мог попытаться поправить что ты имел в виду ? |
| Автор: Earnest 27.7.2006, 12:52 |
| Prehistorik, ты прав: В функции-члене класса первым невидимым аргументом является this. |
| Автор: NextAlex 28.7.2006, 19:28 |
| Prehistorik Earnest, я с вами согласен полностью, но поясните если сможете как это может помочь в данном случае? статические методы класса не могут использовать ни this ни любые другие методы, использующие this единственный путь - передавать в статическую функцию указатель на экземпляр класса |
| Автор: Prehistorik 29.7.2006, 10:35 |
| NextAlex, Я бы лучше сделал функцию враппер для функции класса.... Но это как-то криовато.... |