#c #class #function-pointers #global
#c #класс #указатели на функции #глобальный
Вопрос:
Я хочу иметь класс, который имеет в качестве члена указатель на функцию
вот указатель на функцию:
typedef double (*Function)(double);
вот функция, которая соответствует определению указателя функции:
double f1(double x)
{
return 0;
}
вот определение класса:
class IntegrFunction
{
public:
Function* function;
};
и где-нибудь в основной функции я хочу сделать что-то вроде этого:
IntegrFunction func1;
func1.function = f1;
Но этот код не работает.
Возможно ли присвоить члену класса указатель функции на глобальную функцию, объявленную как указано выше? Или я должен что-то изменить в определении указателя функции?
Спасибо,
Комментарии:
1. Каким образом это не работает?
2. Как это «не работает»? Вы получаете ошибку компилятора? Если да, то что это?
3. Нам было бы легче найти ответ, если бы вы предоставили полный пример. Вы настолько близки, что для завершения потребуется всего несколько строк. Также, можете ли вы сказать нам, что вы подразумеваете под «не работает»? Вы получаете ошибку от компилятора? Компоновщик? Вы получаете поведение во время выполнения, отличное от того, что вы ожидаете?
Ответ №1:
Замените это:
class IntegrFunction
{
public:
Function* function;
};
с помощью этого:
class IntegrFunction
{
public:
Function function;
};
Ваш typedef уже создает указатель на функцию. Объявление Function* function
создает указатель на указатель на функцию.
Комментарии:
1. Спасибо, я понял свою ошибку, и теперь мой код работает. В следующий раз мне следует быть более осторожным.
Ответ №2:
Просто замените
Function* function;
Для
Function function;
Ответ №3:
Вы объявляете переменную как Function* function
, но Function
typedef уже является typedef для указателя. Таким образом, тип указателя на функцию — просто Function
(без *).
Ответ №4:
Заменить
typedef double (*Function)(double);
Автор:
typedef double Function(double);
для ввода указать тип функции. Затем вы можете записать *
при ее использовании.
Ответ №5:
Для получения указателя на функцию в стандартном C необходимо использовать оператор address-of03.
func1.function = amp;f1;
Комментарии:
1. Нет, вы этого не делаете.
amp;
Необходим для получения адреса функции-члена, но не для функции, не являющейся членом.