函数的功能无法识别输入参数

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);' 上面的函数参数只有两个参数,

  1. "x" - 'is of type double'
  2. "g" 作为指向 'double(*)(double)' 类型函数的指针。 'double (*g) (double y)' 这里 'y' 是函数指针的一部分,如果不使用 y.
  3. ,您的代码将可以完美地编写函数
  4. 此处您尝试使用 'y' 作为输入参数调用您的函数,但编译器无法在其范围内找到 'double y',因此会抛出错误。
  5. 因为函数 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)
    }
    
  6. 您的代码运行良好,您需要再添加一个 "double" 作为函数的参数,如此处所示 TwoDimensional::f_xANDg_y(double x, double(*g)(double), double y)。正如编译器所期望的那样。

  7. 更正后的代码:

'

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));
}

'