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

标签 c++ function-pointers

我正在尝试使用指向函数的指针创建函数的函数,类似于 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);' 上面的函数参数只需要两个参数,

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

'

关于c++ - 函数的功能无法识别输入参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51690368/

相关文章:

c++ - 需要使用互斥量显式定义复制构造函数

c++ - 在 C++ 中具有基于模板的内存管理的通用矩阵类

c++ - 如何以表格格式打印数据?

c++ - 我必须依赖编译器 NRVO 吗?

C++ 指向不在范围内的函数调用的指针

c - 在函数内部时,如何获取它的返回地址?

c++ - pcap_loop中的回调方法

c# - 在转换为 "out/ref"的表达式中支持 "object"参数

C++ 类 : pointer to a non-static func

c++ - 如何使 QLineEdit 在 Windows 中不可编辑