将函数指针作为构造函数的参数传递给私有实例变量时出错
error assigning a function pointer passed as an argument in the constructor to a private instance variable
我试图分配一个函数指针,这是一个类的构造函数参数到一个私有实例变量。(这样做的目的是能够将回调函数传递给构造函数,并在类的成员函数中使用该回调函数。)
我认为我正确地将实例变量声明为函数指针。我阅读代码片段的方式是,左操作数"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);
你会很好的
相关文章:
- 返回 C++ 中的指针实例变量
- 返回实例变量的c++方法可以访问变量中的数据,但不能更改它,但在编译时不会生成错误
- C++ 实例变量初始值设定项中的重复类型
- 为什么可以在没有实例变量的情况下访问静态回调方法中的静态成员变量?
- C++ 中实例变量的双冒号
- 我可以在没有任何实例变量的情况下使用 decltype 吗?
- OpenMP 私有类实例变量
- C 取消实例变量指针
- 在C++私有区域中初始化实例变量
- 如何将指针存储在实例变量中,该指针被声明为指向基类的指针
- 如何在Arduino中创建另一个类库的实例变量
- 单元测试呼叫实例变量的函数
- 为构造函数初始化引用实例变量提供默认值
- 如何使编译器在实例变量未初始化时C++生成错误或警告
- 如何超载分配运算符,该操作员总计两个实例变量
- C++:通过引用传递或使用私有实例变量
- 对象作为类内的实例变量
- 在不构造实例变量的情况下C++声明实例变量的好方法是什么?
- 实例变量列表中的对象未被保留?指针问题
- Asio完成处理程序中的实例变量无效