函数的功能无法识别输入参数
Function of a function does not recognize an input parameter
我正在尝试使用指向函数的指针创建一个函数的函数,类似于 www.cplusplus.com 上 this link 的底部(最后一节)给出的内容,只是更高级一些.我正在尝试以下操作:
在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(double x, double(*g)(double y);'
上面的函数参数只有两个参数,
- "x" - 'is of type double'
- "g" 作为指向 'double(*)(double)' 类型函数的指针。 'double (*g) (double y)' 这里 'y' 是函数指针的一部分,如果不使用 y.
,您的代码将可以完美地编写函数
- 此处您尝试使用 'y' 作为输入参数调用您的函数,但编译器无法在其范围内找到 'double y',因此会抛出错误。
因为函数 TwoDimensional 中的整个 'double(*g)(double y)' 参数归结为 "a function pointer which take double as input and returns 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), 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));
}
'
我正在尝试使用指向函数的指针创建一个函数的函数,类似于 www.cplusplus.com 上 this link 的底部(最后一节)给出的内容,只是更高级一些.我正在尝试以下操作:
在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(double x, double(*g)(double y);' 上面的函数参数只有两个参数,
- "x" - 'is of type double'
- "g" 作为指向 'double(*)(double)' 类型函数的指针。 'double (*g) (double y)' 这里 'y' 是函数指针的一部分,如果不使用 y. ,您的代码将可以完美地编写函数
- 此处您尝试使用 'y' 作为输入参数调用您的函数,但编译器无法在其范围内找到 'double y',因此会抛出错误。
因为函数 TwoDimensional 中的整个 'double(*g)(double y)' 参数归结为 "a function pointer which take double as input and returns 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), 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));
}
'