C++ 函数的函数不能识别输入参数

C++ 函数的函数不能识别输入参数,c++,function-pointers,C++,Function Pointers,我试图使用指向函数的指针来创建函数的函数,类似于www.cplusplus.com上的底部(最后一节)给出的,只是稍微高级了一点。我正在尝试以下方法: 在myFile.h中 // namespace for: Functions namespace Functions { // namespace for: 1D functions namespace OneDimensional { // Function for: f(x) = x * x, Note:

我试图使用指向函数的指针来创建函数的函数,类似于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)
}
双函数::一维::xtx(双x){
返回(x*x);
}
双函数::二维::f_xANDg_y(双x,双(*g)(双y)){

return(x+(*g)(y));//此处出现错误,因为编译器不知道什么是“y”,因为它在函数调用的可见范围内的任何位置都没有声明。 ‘f_xANDg_y(双x,双(*g)(双y);’ 上述功能参数仅取两个参数

  • “x”-“是双精度类型”
  • “g”作为指向类型为“double(*)(double)”的函数的指针。它是“double(*g)(double y)”。此处“y”是函数指针的一部分,您的代码可以完美地编写函数,而不必使用y
  • 在这里,您试图使用“y”作为输入参数调用函数,而编译器无法在其作用域中找到“double y”,因此,它会抛出一个错误
  • 由于函数中的整个“double(*g)(double y)”参数TwoDimensional归结为“以double作为输入并返回double的函数指针”


    此处出现错误,因为编译器不知道什么是“y”,因为它在函数调用的可见范围内的任何位置都没有声明。 ‘f_xANDg_y(双x,双(*g)(双y);’ 上述功能参数仅取两个参数

  • “x”-“是双精度类型”
  • “g”作为指向类型为“double(*)(double)”的函数的指针。它是“double(*g)(double y)”。此处“y”是函数指针的一部分,您的代码可以完美地编写函数,而不必使用y
  • 在这里,您试图使用“y”作为输入参数调用函数,而编译器无法在其作用域中找到“double y”,因此,它会抛出一个错误
  • 由于函数中的整个“double(*g)(double y)”参数TwoDimensional归结为“以double作为输入并返回double的函数指针”


    什么是
    y
    ?你想传递给
    g
    的值是什么?你是想把
    y
    作为一个额外的参数传递吗?很难说你想实现什么,但可能类似于
    double f_xANDg_y(double x,double y,double(*g)(double)){返回x+g(y)}”
    我不明白这个练习的意义。@IgorTandetnik我的想法是传递g,它是指向某个函数(任何函数)的指针它本身有一个输入参数y。这就是我试图在myFile.cpp中实现的。您确实传递了该函数。现在您还需要传递一个值来调用该函数。@IgorTandetnik好的,我将按照您所说的方法尝试将3个输入参数传递到fxandy,谢谢您的帮助help@IgorTandetnik这就解决了问题错误,如果您想将其作为答案发布,您可以,无论哪种方式都要感谢。本练习的重点是,我需要这些函数来测试我正在编写的数值方法。什么是
    y
    ?您想传递给
    g
    ?您想传递
    y
    作为额外参数吗?很难判断是什么至少,您正在尝试实现,但可能类似于
    double f_xANDg_y(double x,double y,double(*g)(double)){return x+g(y);}
    我不明白这个练习的意义。@IgorTandetnik我的想法是传递g,它是指向某个函数(任何函数)的指针它本身有一个输入参数y。这就是我试图在myFile.cpp中实现的。您确实传递了该函数。现在您还需要传递一个值来调用该函数。@IgorTandetnik好的,我将按照您所说的方法尝试将3个输入参数传递到fxandy,谢谢您的帮助help@IgorTandetnik这就解决了问题错误,如果你想把它作为一个答案,你可以,无论哪种方式,谢谢。这个练习的重点是,我需要这些函数来测试我正在写的数值方法
        double Functions::TwoDimensional::f_xANDg_y(double x, double(*g)(double y)) {
       return (x + (*g)(y));  // <== This is where I get the Error (E0020)
    }
    
    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));
    }