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

Function of a function does not recognize an input parameter

本文关键字:函数 输入 参数 识别      更新时间:2023-10-16

我正试图使用指向函数的指针来创建一个函数的函数,类似于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;溢出,该用户缺少大括号。我检查了一下,没有丢失支架(但即使检查了几次,我也可能错了(。

是我错误地实现了f(x,g(y((的想法,还是我真的缺少了一个大括号?

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

  1. "x"-其"类型为double">
  2. "g"作为指向"double(*((double("类型函数的指针。即"double(*g((double y(",这里"y"是函数指针的一部分,您的代码在使用y的情况下会完美地编写函数
  3. 在这里,您试图用"y"作为输入参数来调用函数,而编译器在其作用域中找不到"double y",因此,它抛出了一个错误
  4. 由于函数TwoDimenerional中的整个"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)
    }
    
  5. 您的代码运行良好,您需要再添加一个"double"作为函数的参数,如TwoDimensional::f_xANDg_y(double x, double(*g)(double), double y)所示。正如编译器所期望的那样。

  6. 更正后的代码:

'

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

'