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

时间:2014-05-24 03:25:52

标签: c++ compiler-errors function-pointers

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

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

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

我收到以下错误消息: “错误C2659:'=':作为左操作数运行”

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

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,如果这很重要的话。 (使用旧版本与旧课程资料兼容)。

1 个答案:

答案 0 :(得分:1)

声明

int (cmp)(Type, Type);

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

即可
int (*cmp)(Type, Type);

你会很好。