Доброго времени суток!
Дан класс (точнее взят из примеров Qwt)
class FunctionData: public QwtSyntheticPointData
{
public:
FunctionData(double(*y)(double)):
QwtSyntheticPointData(1000),
d_y(y)
{
}
virtual double y(double x) const
{
return d_y(x);
}
private:
double(*d_y)(double);
};
Создаю дальше класс плота (за кривоту прошу прощения).
#include <qwt_plot.h>
#include <qwt_plot_curve.h>
class tdcsplot : public QwtPlot
{
private:
double _E0, _E2, _Theta1, _Dphi;
int _points;
bool _fba, _fbamec, _sba, _za;
double qFba (double x);
double qFbaMec (double x);
public:
tdcsplot(double e0, double e2, double theta1, double dphi, int points, bool FBA, bool FBAMEC, bool SBA, bool ZA);
};
Приватные переменные - это параметры, которые влияют на поведения графика(ов).
Приватные функции - соответствующие функции которые по заданным параметрам и по значению x выдают значение y.
В кострукторе tdcsplot(...) создаю кривые, и пытаюсь им присвоить данные следующим образом :
if (_fba)
{
QwtPlotCurve *cFba = new QwtPlotCurve("First Bourne Approximation");
cFba->setRenderHint(QwtPlotItem::RenderAntialiased);
cFba->setPen(QPen(Qt::red));
cFba->attach(this);
cFba->setData(new FunctionData(this->qFba));//ругается здесь
}
Компилятор говорит буквально следующее :
tdcsplot.cpp: In constructor ‘tdcsplot::tdcsplot(double, double, double, double, int, bool, bool, bool, bool)’:
tdcsplot.cpp:45:50: ошибка: нет подходящей функции для вызова ‘FunctionData::FunctionData(<unresolved overloaded function type>)’
functiondata.h:8:5: замечание: претенденты: FunctionData::FunctionData(double (*)(double))
functiondata.h:6:1: замечание: FunctionData::FunctionData(const FunctionData&)Если в файле *.cpp определить обычную функцию с той же семантикой, и передать её в качестве параметра - всё пучком. Но проблема тогда в другом - в этой функции нельзя обратиться к полям класса tdcsplot.
Подскажите, почему класс FunctionData не хочет на вход принимать функцию, которая является методом класса?