错误:表达式不能用作函数

时间:2020-05-20 14:08:19

标签: c++

有my.hpp:

pm.test("Resultado deve retornar SUCESSO se o Driver de Passagem possuir Parametros", function () {
var jsonData = pm.response.json();
var DriverD = parseFloat(jsonData.idCons);
pm.expect(DriverD).not.toBe(null);});  

pm.test("Resultado deve retornar SUCESSO 200 OK", function () {
pm.response.to.have.status(200);});

还有我的test1a.cpp:

#include <utility>

#ifndef ROBBINS_MONRO
#define ROBBINS_MONRO


template <class Func, class DetermSeq, class RandomV, class RNG>
std::pair<double,double> robbins_monro(const Func & h, double x_init, double alpha, const DetermSeq & epsilon, RandomV & U, RNG & G, long unsigned N){
    for(int i=0; i<N; i++){
        x_init-= epsilon(i+1)(h(x_init) - alpha + U(G));
    }
    return std::make_pair(x_init, h(x_init));
}


#endif

我遇到此错误:

错误:表达式不能用作函数

对于该行:

x_init- = epsilon(i + 1)(h(x_init)-alpha + U(G));

我不明白,因为所有术语都是双重的,而不是“函数”

1 个答案:

答案 0 :(得分:1)

我假设您要在此处进行乘法,为此需要*运算符:

x_init -= epsilon(i+1) * (h(x_init) - alpha + U(G));
                  //  ^^^

您编写的表达式在常规代数中很有意义,但是在c ++中,第二个括号成为对epsilon(i+1)结果的函数调用。由于此操作返回了unsigned long long,因此它不是一个函数,因此您无法调用它。

此外,在此lambda中:

[] (long unsigned n) { return 1/(1+n); };

除非n0,否则此函数将始终返回0,因为您正在执行整数除法。相反,您可以执行以下操作:

[] (long unsigned n) { return 1. /(1+n); };