我正在尝试使用指向函数的指针创建函数的函数,类似于 this link 底部(最后一节)给出的内容在 www.cplusplus.com 上,除了更高级一点。我正在尝试以下操作:
在 myFile.h 中
// namespace for: Functions
namespace Functions {
// namespace for: 1D functions
namespace OneDimensional {
// Function for: f(x) = x * x, Note: read t as times
double xtx(double x);
}
// namespace for: 2D functions
namespace TwoDimensional {
// Function for: f(x, g(y)) = x + g(y), Note: read _ as "of"
double f_xANDg_y(double x, double(*g)(double y));
}
}
在 myFile.cpp 中
double Functions::OneDimensional::xtx(double x) {
return (x * x);
}
double Functions::TwoDimensional::f_xANDg_y(double x, double(*g)(double y)) {
return (x + (*g)(y)); // <== This is where I get the Error (E0020)
}
我检查了错误E0020这把我带到了 Stack Overflow,那个用户缺少了一个支撑。我检查了一下,我没有遗漏大括号(但即使检查了几次,我也可能是错的)。
是我错误地实现了 f(x, g(y)) 的想法,还是我实际上缺少大括号?
最佳答案
错误出现在这里是因为编译不知道什么是“y”,因为它没有在函数调用的可见范围内的任何地方声明。 'f_xANDg_y(双 x,双(* g)(双 y);' 上面的函数参数只需要两个参数,
- "x"- '是 double 类型'
- “g”作为指向“double(*)(double)”类型函数的指针。这是 'double (*g) (double y)' 这里 'y' 是函数指针的一部分,如果不使用 y,您的代码将完美地编写函数。
- 在这里,您尝试使用“y”作为输入参数调用您的函数,但编译器无法在其范围内找到“double y”,因此会抛出错误。
由于函数 TwoDimensional 中的整个“double(*g)(double y)”参数归结为“一个以 double 作为输入并返回 double 的函数指针”
double Functions::TwoDimensional::f_xANDg_y(double x, double(*g)(double y)) { return (x + (*g)(y)); // <== This is where I get the Error (E0020) }
您的代码工作正常,您需要再添加一个“double”作为函数的参数,如下所示
TwoDimensional::f_xANDg_y(double x, double(*g)(double),双 y)
。正如编译器所期望的那样。- 修改后的代码:
'
namespace Functions {
// namespace for: 1D functions
namespace OneDimensional {
// Function for: f(x) = x * x, Note: read t as times
double xtx(double x);
}
// namespace for: 2D functions
namespace TwoDimensional {
// Function for: f(x, g(y)) = x + g(y),a Note: read _ as "of"
double f_xANDg_y(double x, double(*g)(double), double yParam);
}
}
double Functions::OneDimensional::xtx(double x) {
return (x * x);
}
double Functions::TwoDimensional::f_xANDg_y(double x, double(*g)(double), double y) {
return (x + g(y));
}
'
关于c++ - 函数的功能无法识别输入参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51690368/