c++ - 意外的大 u16_t buf

标签 c++ c pointers c-libraries

我有一个 C 函数,它调用函数指针(带有指向 buf 的指针和 buf 的大小)

printf("------------------------------\n");
printf("lengh of DATA_output = %zu\n", p->tot_len);
(*myStr.OnSendData)(buf, p->tot_len);
printf("------------------------------\n");

指向函数定义的指针

typedef void (*pOnSendData)(void *buf, u16_t len);

然后我真正的 C++ 类方法通过该指针获取它:

void Someclass::myPOnSendData(void *buf, u16_t len) {
std::cout << " Someclass::mypOnSendData len = " << (int)len << std::endl;
//Do something
}

问题在于 buflen 相当大。

输出是:

------------------------------
lengh of DATA_output = 42
------------------------------

Someclass::myPOnSendData len = 50512

怎么会这样?

最佳答案

您说 myPOnSendData 不是静态成员函数,但您试图将指向它的指针分配给 C 函数指针。这是行不通的,因为 C 风格的函数指针不支持非静态成员函数。

如果将函数更改为静态,它将与指针类型兼容。

请注意,由于类型当前不兼容,因此您在尝试分配函数指针时可能会收到错误消息,并且必须执行强制转换才能绕过它。不要这样做,因为您只是隐藏错误而不是解决它。

关于c++ - 意外的大 u16_t buf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24996374/

相关文章:

c - 如何检测代码意外创建指向指针的指针的实例?

c++ - 为什么有些人更喜欢 "T const&"而不是 "const T&"?

c++ - MFC 中的 OnKillFocus() 覆盖在奇数时间触发

c++ - C++中移动赋值运算符的继承

c++ - 这个 DirectX 渲染模型看起来有什么问题,您只能看到内墙而外墙是透明的?

c - 用整数和字符刷新指针

C++ 代码编译时不包含

c - fork : number of processes created

pointers - 在golang中使用指针进行多次分配和创建

c - 为什么我不能使用此代码覆盖字符串?