【发布时间】:2020-01-01 05:03:36
【问题描述】:
我有一个公共成员函数,它需要作为参数传递给一个函数,该函数低于我需要从中启动计算的函数。此外,需要传递的函数还需要参数。我正在使用 c++,这是我的第一个大型编码项目,但无法诊断编译错误。
请注意,我试图避免使用指针,这不是我的选择,而是(编辑)我的老板,因此一切都是参考。
-----------------------------------------------------------------
class Class1 {
public:
void get_val(int &a, double &val) ;
private:
vector<double> vector_ ;
} ;
void Class1::get_val(int &a, double &val) { vector_[a] = val;}
-----------------------------------------------------------------
class Class2 {
public:
void calc_func(int &b,
std::function< void ( int, double) > functocall,
double &ans)
private:
int conversion_ ;
void calc_other_func(int &c,
std::function< void ( int, double) > functocall,
double &ans)
} ;
void Class2::calc_func(int &b,
std::function< void ( int, double) > functocall,
double &ans)
{
int c = b * 2 ;
double tmp_val ;
calc_other_func(c,functocall, tmp_val) ;
ans = tmp_val / 4 ;
}
void Class2::calc_other_func(int &c,
std::function< void ( int, double) > functocall,
double &ans)
{
int d;
double val;
d = c / conversion_ ;
functocall(d, val) ;
ans = val;
}
-----------------------------------------------------------------
int main()
{
int b = 4;
double ans;
Class2.calc_func(b,Class1.get_val(int, double),ans) ;
}
-----------------------------------------------------------------
我得到的编译错误是:
"在成员函数 void Class2::calc_func(int&, double&): 错误:“int”之前的预期主表达式 Class1.get_val(int,double),"
【问题讨论】:
-
让 Class2 的一个实例调用成员函数
calc_func。否则将 calc_func 声明为静态函数。 -
顺便说一句:
Class1::get_val()有参数int&, double&但functocall需要签名int, double。这是一个区别 -> 引用与值。 -
首先看起来你使用过 Java 或其他类似语言,在 C++ 中访问类函数时使用
::而不是.。其次,在传递函数时,您不需要指定它的参数或参数类型。第三,您可能需要使用std::bind将函数绑定到特定实例,当然如果它不是静态的。如果您提供了最少的可重现示例(即不要删除类声明),那将会很有帮助。 -
@Scheff 所以我尝试更改签名,但收到以下错误“错误:不匹配调用 '(std::function
) (int&, const int&, double&)'" -
@sklott 我没有使用 Java 的经验,只有 Python 和 Fortran90。我根据您的要求编辑了示例以添加更多详细信息。
标签: c++ functional-programming