通常、std :: bindはboost :: math :: tools :: bisect()でうまく機能します。ただし、メンバー関数を持つクラスでstd :: bindを使用しようとすると、常にエラーが発生します:「 'bind( "の呼び出しに一致する関数がありません」
これは、クラスの1つのメンバー関数です。
double SingleCapillaryTube::calLocationFunctionWithoutAngle(const TubeGeometry &TG,
const FluidProperties &FP, double tempLocation,
double initialLocationValue, double tempTime,
const double initialTimePoint)
{
auto coefficientB = calCoefficientB(TG, FP);
auto coefficientA = calCoefficientA(TG, FP);
auto coefficientD = calCoefficientD(TG, FP);
auto tempValue = -coefficientB * (tempLocation - initialLocationValue) - \
1./2. * coefficientA * (pow(tempLocation, 2.) - \
pow(initialLocationValue, 2.)) - coefficientD * \
(tempTime - initialTimePoint);
return tempValue;
}
次に、この関数はクラスの他のメンバー関数で使用されます。
void SingleCapillaryTube::calLocationInterfaceBisect()
{
stepResult = boost::math::tools::bisect(std::bind(calLocationFunctionWithAngle,\
Geometry, Fluids, _3, initialLocation, \
timePoint, initialTime), 0.0, \
-Geometry.length, Tol);
}
ファイルがコンパイルされたとき、エラーは常に発生していました。誰かが私がこの問題を解決するのを手伝ってもらえますか?どうもありがとう:)
非静的メンバー関数を呼び出すには、インスタンスが必要です。それを与えるには、this
関数への最初の引数としてポインタを渡します。また、関数の完全修飾名を使用して、そのアドレスを取得する必要があります。
std::bind(&SingleCapillaryTube::calLocationFunctionWithAngle, this,
Geometry, Fluids, _3, initialLocation, timePoint, initialTime)
また、を使用_3
すると、3番目の位置引数がそのパラメーターにバインドされるため、この場合、1番目と2番目の引数は無視されることに注意してください。あなたはおそらく_1
その場所に行きたいでしょう。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加