【发布时间】:2010-06-21 09:56:52
【问题描述】:
我成功地终于能够在previous post here 的 C++ 项目中使用来自 PDcurses 库的 TUI 标头。
现在在我的班级中,我包含了 C 标头:
#include "tui.h"
tui 是 C 语言并且有这个菜单定义:
typedef struct
{
char *name; /* item label */
FUNC func; /* (pointer to) function */
char *desc; /* function description */
} menu;
所以在 MainView.cpp 我有:
void sub0()
{
//domenu(SubMenu0);
}
void sub1()
{
//domenu(SubMenu1);
}
void MainView::showMainMenu()
{
menu MainMenu[] =
{
{ "Users", sub0, "Manage Users" },
{ "Accounts", sub1, "Manage Accounts" },
{ "Items", sub1, "Manage Items" },
{ "Staff", sub1, "Manage Staff" },
{ "", (FUNC)0, "" }
};
startmenu(MainMenu, "Library System 1.0");
}
这是按预期工作的。
问题是我需要在 sub0() 和 sub1() 中调用我的类方法。
我尝试为我的班级定义 C++ 方法来尝试替换 sub0 和 sub1 与:
void MainView::sub0()
{
//domenu(SubMenu0);
}
void MainView::sub1()
{
//domenu(SubMenu1);
}
编译器抛出此错误:
error C2440: 'initializing' : cannot convert from 'overloaded-function' to 'FUNC'
None of the functions with this name in scope match the target type
将这些函数指针传递给 C 代码并消除该错误的最佳方法是什么?
谢谢
【问题讨论】:
-
我不熟悉 TUI,但我不确定 boost::bind 是你想要的 - 在 MainMenu 初始化之后,绑定结构将被销毁并且你的 menu::func 实例将包含悬空指针。您可以创建一个 boost::function 对象数组,使用 boost:bind 填充新的函数数组,并使用 menu::func 的函数数组填充 MainMenu。对不起,这个评论应该是给 SoapBox 的