我正在讀Daoqi Yang的「面向科學家和工程師的面向對象的C++和麪向對象數值計算」一書。他有一個類似於我在下面顯示的例子,但例外是我定義的類「P」和倒數第二行(不起作用)。我的問題是:當我提供函數成員f.integrand時,爲什麼我的編譯器會生成錯誤?我能做些什麼來糾正這個問題?產生的錯誤是C3867,C2440和C2973。使用類成員函數作爲模板參數的問題
下面是代碼:
class P{
public:
double integrand(double x){
return (exp(-x*x));
}
};
template<double F(double)>
double trapezoidal(double a, double b, int n)
{
double h=(b-a)/n;
double sum=F(a)*0.5;
for(int i=1;i<n;i++)
{
sum+=F(a+i*h);
}
sum+=F(b)*0.5;
return (sum*h);
}
double integrand2(double x){
return (exp(-x*x));
}
int main(){
P f;
cout<< trapezoidal<integrand2>(0,1,100)<<endl; // this works
cout<< trapezoidal<f.integrand>(0,1,100)<<endl; // this doesn't work
}
很好的答案。我很樂意投它,但我沒有'名聲'來做。這絕對啓發我尋求替代解決方案。看到我發佈的答案... – Pasta23