エラーの解決方法:std :: bindがクラスで使用されている場合、「 'bind(<未解決のオーバーロードされた関数タイプ>」を呼び出すための一致する関数がありません」

ヘクトール。読んだ

通常、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]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ