>source

'std :: function'을 사용하여 'test'함수 내에서 'testfun'함수를 호출하여 변수 수를 1 씩 줄이고 중간 계산을 수행하려고합니다.

'A'클래스 (벡터)는 2D의 1D 배열을 포함합니다.

실행 중 프로그램이 지정된 지점에서 종료되고 'const auto _Impl = _Getimpl ();'에서 '기능'파일이 열립니다. 선. 문제를 해결하는 방법?

#include <functional>
class A
{
public:
    double* d;
    unsigned s;
    A(unsigned size)
    {
        s = size;
        d = new double[s];
    }
};
double testfun(A* param, A* x)
{
    return param->d[0] + param->d[1] * x->d[0];
}
std::function<double(A*)> anon(std::function<double(A*, A*)> f, A& x, A& y)
{
    std::function<double(A*)> result = [&](A * param_)
    {
        // Program fails somewhere at that point
        double sum = 0.0;
        for (unsigned i = 0; i < x.s; i++)
            sum += f(param_, &x) - y.d[i];
        return sum;
    };
    return result;
}
double test(std::function<double(A*, A*)> f)
{
    A x(1); A y(1);
    x.d[0] = 0.0;
    y.d[0] = 2.0;
    A* param = new A(2);
    param->d[0] = 2.0; param->d[1] = 6.0;
    std::function<double(A*)> func = anon(f, x, y);
    return func(param);
}
void main()
{
    double t = test(testfun);
}

  • 답변 # 1

    그것만이 유일한 문제는 아니지만 문제입니다.

    다음 기능에서

    std::function<double(A*)> anon(std::function<double(A*, A*)> f, A& x, A& y)
    {
        std::function<double(A*)> result = [&](A * param_)
        {
            // Program fails somewhere at that point
            double sum = 0.0;
            for (unsigned i = 0; i < x.s; i++)
                sum += f(param_, &x) - y.d[i];
            return sum;
        };
        return result;
    }
    
    

    반환 된 람다는 f 를 받는다  참조 비트 anon()   f 를 받다  사본으로.

    따라서 반환 된 람다를외부 anon() 에 전화하면 f 에 매달려있는 참조가 포함되어 있습니다. .

    제안 : f 를 전달해보십시오 으로 람다에 복사합니다.

    // ....................................V  f by copy
    std::function<double(A*)> result = [&, f](A * param_)
     { /* lambda content */ }
    
    

관련 자료

  • 이전 Excel 수식은 평가가 큰지 확인하고 최대 값을 반환합니다
  • 다음 Excel VBA - 엑셀 vba - 셀 찾기 및 동적 배열에 추가