将函数指针作为构造函数的参数传递给私有实例变量时出错

error assigning a function pointer passed as an argument in the constructor to a private instance variable

本文关键字:实例 变量 出错 参数传递 指针 函数 构造函数      更新时间:2023-10-16

我试图分配一个函数指针,这是一个类的构造函数参数到一个私有实例变量。(这样做的目的是能够将回调函数传递给构造函数,并在类的成员函数中使用该回调函数。)

我认为我正确地将实例变量声明为函数指针。我阅读代码片段的方式是,左操作数"cmp"是一个指针,而不是一个函数,就像右操作数一样。(两者都是指向同一类型函数的指针,至少我是这么认为的。)然而,错误消息显示"函数为左操作数"。我做错了什么或误解了什么?是否存在"最令人烦恼的解析"问题?

如何修复此错误并分配函数指针?

我得到以下错误信息:"error C2659: '=': function为左操作数"

错误发生在以下代码片段中:

template <typename Type>
    PQueue<Type>::PQueue(int (cmpFn)(Type,Type))
    {
        cmp = cmpFn;
    }

编译器报错

cmp = cmpFn;
构造函数原型是
PQueue(int (cmpFn)(Type, Type) = OperatorCmp);

(OperatorCmp只是另一个函数指针)

我在私有节中将实例变量声明为

int (cmp)(Type, Type);

我使用的IDE是Visual c++ 2008 Express,如果这很重要。(使用旧版本以兼容旧教材)

声明

int (cmp)(Type, Type);

确实声明了一个函数,而不是函数指针。但是,函数声明的参数列表中使用的相同语法表示函数指针,因此cmpFn实际上是int (*)(Type, Type)类型。只需将cmp的声明更改为

int (*cmp)(Type, Type);

你会很好的