3つの関数は配列ポインタODEによってアクセス可能な関数ポインタの配列へのポインタの配列を渡す[3]:C++トラブル以下
double voltage(double v) {
return Iapp - (gL*(v - EL)) - (gNa * pow(m, 3) * h * (v - ENa)) - (gK * pow(n, 4) * (v - EK));
}
double hdot(double h) {
ah = 0.07*exp(-(v + 58)/20);
bh = 1/(exp(-0.1*(v + 28)) + 1);
return (phi * (ah*(1 - h) - bh*h));
}
double ndot(double n) {
an = -0.01*(v + 34)/(exp(-0.1*(v + 34)) - 1);
bn = 0.125 * exp(-(v + 44)/80);
return (phi * (an*(1 - n) - bn*n));
}
typedef double(*eqpointer)(void);
eqpointer ODE[3];
そのような別の機能において
ODE[0] = voltage;
ODE[1] = hdot;
ODE[2] = ndot;
、midvaluesその,オンスロープおよびk1は配列へのポインタです。
for (int j{ 0 }; j <= eq_num; ++j) k1[j] = dt*(ODE[j]());
for (int j{ 0 }; j <= eq_num; j++) midvalues[j] = oneloop[j] + k1[j]/2;
私はループを実装する:すべての関数ODE [j]は、引数として、対応するポインタmidvalues [j]を取ること
for (int j{ 0 }; j <= eq_num; j++) ODE[j](midvalues[j]);
は、このような。
私は私が機能するための2つのポインタ、引数を取らず、値を返します 1、すなわち必要な推測している:ODE[j]()
と別の引数としてポインタ位置を取り、値を返します。
私は幸運でこれを行う方法を見つけるのに苦労している、どんな助けにも感謝します。事前に 感謝:) C++の
私はあなたのクラスを好む、そしてクラス内のこれらの電圧、HDOTなど '方法' を作るかもしれないと思います。私は思う...あなたの質問を理解するのが苦労している – Grantly
とにかく、関数へのポインタの型は1つしかなく、署名と一致する必要があります。あなたの場合、それらはすべて 'double'パラメータをとり、' double'を返します。したがって、 'double(*)(double)'です。 –
'midvalue [j]'は配列ポインタです。 ODE [j](midvalues [j]); 'それぞれの' ODE [j] 'に、対応する' midvalues [j(= ja = 0); j <= eq_num; j ++) ODE [j]()を使って引数を渡さずにODE [j]を呼び出すこともできます。 –