视觉C++错误 C3867 和 C2664
Visual C++ errors C3867 and C2664
#define UCHAR unsigned char
typedef bool (*FUNC)(UCHAR uc1, UCHAR uc2);
typedef void(*PF)(FUNC, UCHAR*);
PF Assign;
class Class {
private:
UCHAR buf[32];
bool func(UCHAR c1, UCHAR c2) { }
public:
Class::Class(void) {
Assign( func, buf ); // <<< Microsoft VC++ error C3867
}
Class::~Class() { }
};
错误 C3867:"类::func":函数调用缺少参数列表; 使用 '&Class::func' 创建指向成员的指针
如果我尝试上面错误消息中的建议
Assign( &Class::func, buf ); <<
我收到此错误:
错误 C2664:"无效(FUNC,无符号字符 *)":无法转换 参数 1 来自 'bool (__thiscall Class::*)(无符号字符,无符号字符)' 到"FUNC" 没有上下文可以进行此转换
在不更改任何其他内容的情况下,我如何编译此 Assign() 函数?这些 typedef 来自我需要与之交互的库。
func
是一个非静态成员函数,所以它的类型是bool (Class::*)(UCHAR, UCHAR)
,而Assign
需要bool (*)(UCHAR, UCHAR)
。不能将非静态成员函数转换为非成员函数。
为了能够将func
传递到Assign
,您必须func
设为静态。
类型别名FUNC
和PF
不是成员函数指针,只能用于指向静态成员函数。原因是所有非静态成员函数都有一个隐式的第一个参数来表示this
指针。
如果你需要泛型函数"指针",你应该研究std::function
:
typedef std::function<bool(UCHAR uc1, UCHAR uc2)> FUNC;
typedef std::function<void(FUNC, UCHAR*)> PF;
PF Assign;
Class::Class(void) {
Assign( std::bind(&Class::func, *this), buf );
}
相关文章:
- C2664 无法从'initializer list'转换参数
- 我想获取点的属性,它报告错误 C3867:"point::output_x":非标准语法;使用"&"创建指向成员的指针
- 如何修复此 FSM C++语法错误 C3867
- 为什么这个错误变成(C2664错误C ++ Visual Studio)
- 为什么我在对向量的第二个元素"push_back"中有C3867错误
- 编译方面的问题.错误E0413、E0434、C2664、C2440
- 使用解算器SparseLU并获得错误C2664
- std::映射导致插入时出现C2664错误
- VS 2017 错误 C2664 地图插入尝试
- 使用自定义对象声明shared_ptr数组时出现错误 C2664
- 编译器错误 C2664 使用 std::map 和自定义类作为其值
- 在 sniffer.h libtins 上获取 VS C2664
- 如何在 VC++ 中通过引用传递另一个对象的方法(错误 C2664)
- 在C 中的初学者,我面临此问题错误C3867
- C2664 :当我使用 str.append(str[i]) 时,发生错误
- C++ WinHttpSendRequest Eror C2664
- 在C++中构造模板函数时出现编译错误 C2664 和 C2440
- 了解错误 C2664:无法转换参数 1
- 错误 C2664:无法从'NvPhysicalGpuHandle'转换参数 1
- 视觉C++错误 C3867 和 C2664