gpt4 book ai didi

c++ - C++中void类型的值不允许错误

转载 作者:行者123 更新时间:2023-12-02 10:08:52 25 4
gpt4 key购买 nike

class Emp
{
int no;
char name[50];
public:
void get_data();
} e;

void func_get();

enum ITEMTYPE
{
MI_PARENT, MI_ACTION
};

struct MENUITEM {
enum ITEMTYPE type;
char *name;
char *helpstring;
void *p;
};

// 1
struct MENUITEM get_data = {
MI_ACTION,"Get","Enter to Get", e.get_data() }; // calling get_data() of type void by using abject e

// 2
struct MENUITEM root_draw = {
MI_PARENT, "Options", "Enter to list the Options Menu", (void*)func_get /* calling Global function which have return type void */
};
struct MENUITEM *draw_list[] = {
&get_data
};

当我调用全局函数(case // 2)时,我在程序中使用以上代码
程序正常执行。但是,当我尝试使用class(case // 1)对象调用函数时,显示错误“不允许为void类型的值”。
谁能告诉我解决方案是什么。无论如何我想调用我的类函数。
提前致谢。

最佳答案

suppose MENUITEM的第四个成员应该是指向回调函数的指针。 (void*)func_get是转换为func_get的函数void*的地址。同样,您可以获取&Emp::get_data的地址,但是请记住,该函数属于类而不是对象,因此您不能说&e.get_data。此外,作为类的非静态成员的函数get_data具有隐藏参数,即指针this(Emp* this)。结果,func_getget_data的签名不相同,并且通过函数指针从类外部调用get_data应该要求您将指针传递给对象。

关于c++ - C++中void类型的值不允许错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19257772/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com