###発生している問題
別のヘッダファイルに書いた数値積分の関数で、クラス内のメンバ関数の数値積分をしたいのですが、以下のエラーメッセージが出てしまいました。
静的メンバでないのが原因のようですが、そのようなメンバ関数を数値積分するにはどうしたらよいのでしょうか?
###エラーメッセージ
rei.cpp: In member function 'double MyClass::factor(double)':
rei.cpp:18:66: error: invalid use of non-static member function
double MyClass::factor(double t) { return exp(trapzd(func,0.,t,30)); }
###該当のソースコード
#####rei.cpp
C++
1#include <iostream> 2#include <cmath> 3#include <cstdlib> 4#include "integral.hpp" 5 6class MyClass{ 7private: 8 double w; 9 double get_w(double t){return w;} 10 double func(double t){ return (1.+ get_w(t))/(1.+ t); } 11public: 12 MyClass(){} 13 MyClass(double a) 14 : w(a) {} 15 double factor(double); 16}; 17 18double MyClass::factor(double t) { return exp(trapzd(func,0.,t,30)); } 19 20 21int main(){ 22 double t = 0.5; 23 MyClass c(-1.); 24 std::cout << c.factor(t) << std::endl; 25 26 return 0; 27} 28 29
#####integral.hpp
C++
1#include <iostream> 2#include <cmath> 3 4double trapzd(double (*func)(double), double a, double b, int n) 5{ 6 double x,tnm,sum,del; 7 static double s; 8 int it,j; 9 if (n == 1) { 10 return (s=0.5*(b-a)*(func(a)+func(b))); 11 } else { 12 for (it=1,j=1;j<n-1;j++) it <<= 1; 13 tnm=it; 14 del=(b-a)/tnm; 15 x=a+0.5*del; 16 for (sum=0.0,j=1;j<=it;j++,x+=del) sum += func(x); s=0.5*(s+(b-a)*sum/tnm); 17 return s; 18 } 19}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/14 12:13