質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

2694閲覧

クラスの非静的メンバ関数を他の関数の引数にとりたい

inoshishi

総合スコア17

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2018/11/26 07:59

やりたいこと

クラス内の非静的メンバ関数をニュートン法を使って解きたいです。
ニュートン法の部分はC++でニュートン法を美しく書く その1からお借りしていて、これを使おうと思っています。

起こっている問題、エラーコード

practice.cpp: In function ‘int main()’:
practice.cpp:84:57: error: invalid use of non-static member function ‘float A::hoge(float)’
y = solve_by_newton_method(B.hoge, x, 0.00001, 0.00001);

###該当するソースコード

C++

1auto solve_by_newton_method = []( std::function<int(int)> func , double x ,double error , double delta ) { 2 3 double y1; 4 double y2; 5 double x1; 6 double x2; 7 double diff_x; 8 double next_x; 9 10 x1 = x; 11 12 while (1) { 13 14 x2 = x1 + delta; 15 16 y1 = func(x1); 17 y2 = func(x2); 18 19 diff_x = (y2 - y1) / (x2 - x1); 20 next_x = x1 - y1 / diff_x; 21 22 if (fabs(y1 - 0) < error) { 23 break; 24 } 25 x1 = next_x; 26 } 27 return x1; 28}; 29class A 30{ 31private: 32 float _a,_b,_c; 33public: 34 A(float a,float b,float c); 35 float hoge(float x); 36}; 37 38A::A(float a,float b,float c) 39{ 40 _a = a; 41 _b = b; 42 _c = c; 43}; 44 45float A::hoge(float x) 46{ 47 float y; 48 y = _a*x*x + _b*x + _c; 49 return y; 50}; 51int main(){ 52 53 float x,y; 54 x = 0; 55 A B(1,2,1); 56 y = solve_by_newton_method(B.hoge, x, 0.00001, 0.00001); 57 std::cout << y << std::endl; 58 return 1; 59};

###補足
今回例示したB.hogeはあくまで問題を簡単にした例です。
解きたい関数がB.hoge以外にもあり、また二次関数のように単純な関数でもないためこのようなやり方で解きたいと思っています。どなたかお知恵をお貸しください。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こんにちは。

ラムダ式で渡せばお手軽ですよ。

auto hoge=[&](int x){ return B.hoge(x); }
y = solve_by_newton_method(hoge, x, 0.00001, 0.00001);

ちょっとしたケアレスミスや違和感を感じるコードがありますがキリがないので訂正していません。悪しからず。

投稿2018/11/26 08:27

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

inoshishi

2018/11/26 08:46

ありがとうございます ! 私も回答できるレベルになれるよう精進いたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問