我正在尝试将一个函数指针(它是类的构造函数中的参数)分配给私有实例变量。 (这样做的目的是能够将回调函数传递给构造函数,并在类的成员函数中使用所述回调函数。)
我以为我正确地将实例变量声明为函数指针。我读取代码片段的方式,左操作数“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,如果这很重要的话。 (使用旧版本与旧课程资料兼容)。
答案 0 :(得分:1)
声明
int (cmp)(Type, Type);
确实声明了一个函数,而不是一个函数指针。但是,函数声明的参数列表中使用的语法相同,表示函数指针,因此cmpFn
实际上是int (*)(Type, Type)
类型。只需将cmp
的声明更改为
int (*cmp)(Type, Type);
你会很好。