Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
6ex
0 / 0 / 0
Регистрация: 26.03.2009
Сообщений: 4
#1

Функция рассчета определенного интеграла. (Передача функции как аргумента) - C++

26.03.2009, 12:02. Просмотров 807. Ответов 4
Метки нет (Все метки)

Есть функция пределенная как:
C++
1
float integrall(float (*argFunc)(float x) , float argTmin, float argTmax, float argStep=1)

Если ей в качестве аргумента передать функцию, которая является членом какого-либо класса,
C++
1
integrall(pSubs->pArCpList[0]->getCp, 100,1000);
то компилятор выдает ошибку:
ошибка: аргумент типа ‘float (ThermalCap:: )(float)’ не соответствует типу ‘float (*)(float)’

Однако если передать глобальную функцию
C++
1
integrall(y, 100,1000);
- всё ОК.

Не подскажите что с этим можно сделать?

PS:
OS - Slackware 12.2
Компилятор: gcc
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.03.2009, 12:02     Функция рассчета определенного интеграла. (Передача функции как аргумента)
Посмотрите здесь:

Рекурсивная функция и передача аргументов функции C++
C++ Передача двумерного массива в качестве аргумента функции
Функция для рассчета среднего арефмитического введенных чисел C++
C++ Передача функции в качестве аргумента массив
Вычисление определенного интеграла C++
Передача перегруженной функции как аргумента C++
C++ Функция в качестве аргумента другой функции по умолчанию
C++ Передача объекта в качестве аргумента функции (метода)
C++ Ошибка при передача аргумента: "C2660: calc: функция не принимает 3 аргументов"
C++ Передача массива в качестве аргумента функции
C++ Возможна ли передача двумерного массива в качестве аргумента функции по ссылке
C++ Передача метода класса в качестве аргумента внешней функции

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Humanitis
172 / 164 / 6
Регистрация: 12.01.2009
Сообщений: 430
26.03.2009, 12:53     Функция рассчета определенного интеграла. (Передача функции как аргумента) #2
попробуй так
C++
1
2
3
4
5
...
#include<functional>
...
   integrall(std::mem_fun(&ThermalCap::getCp), 100,1000);
...
6ex
0 / 0 / 0
Регистрация: 26.03.2009
Сообщений: 4
26.03.2009, 15:40  [ТС]     Функция рассчета определенного интеграла. (Передача функции как аргумента) #3
Цитата Сообщение от Humanitis Посмотреть сообщение
попробуй так
C++
1
2
3
4
5
...
#include<functional>
...
   integrall(std::mem_fun(&ThermalCap::getCp), 100,1000);
...
В данном случае ведь не указывается объект класса, которому принадлежит эта функция...
Humanitis
172 / 164 / 6
Регистрация: 12.01.2009
Сообщений: 430
26.03.2009, 16:06     Функция рассчета определенного интеграла. (Передача функции как аргумента) #4
Хм,ну думаю ты никак не сможешь передать указатель на функцию-член какого-нибудь класса,и чтоб функция сама определила из какого именно объекта она вызывается!
Так что тебе придется в функцию передавать еще и указатель на объект класса.
6ex
0 / 0 / 0
Регистрация: 26.03.2009
Сообщений: 4
26.03.2009, 23:17  [ТС]     Функция рассчета определенного интеграла. (Передача функции как аргумента) #5
Есть решение! Всем спасибо!

Объявление:

C++
1
2
3
4
5
template <class classX> float integrall(classX *argClassObj,float (classX::*argFunc)(float x) , float argTmin, float argTmax, float argStep=1){
...
(argClassObj->*argFunc)((curT+nextT)/2)*(nextT-curT);
...
}


Вызов:
C++
1
integrall(pSubs->pArCpList[0], &ThermalCap::getCp, 100,1000);
Yandex
Объявления
26.03.2009, 23:17     Функция рассчета определенного интеграла. (Передача функции как аргумента)
Ответ Создать тему
Опции темы

Текущее время: 06:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru