1

我已经下载了 pdcurses源代码,并且能够成功地将 curses.h 包含在我的项目中,链接了预编译的库,一切都很好。

在试用了几个小时后,我在 demos 文件夹中看到了 tuidemo.c,将其编译为可执行文件,非常棒!正是我的项目所需要的。

现在的问题是它是一个 C 代码,我正在 VS c++ 2008 中开发一个 C++ 项目。

我需要的文件是 tui.c 和 tui.h​​ 如何在我的 C++ 代码中包含该 C 文件?我在这里看到了一些建议

但编译器对 100 条警告和错误不太满意。

我怎样才能继续包含/使用 TUI pdcurses 包含的内容!?

谢谢

编辑:

我添加了 extern "C" 语句,所以我的测试现在看起来像这样,但我得到了一些其他类型的错误

#include <stdio.h>
#include <stdlib.h>
using namespace std;

extern "C" {
   #include <tui.h>
}

void sub0()
{
    //do nothing
}

void sub1()
{
    //do nothing
}


int main (int argc, char * const argv[]) {

    menu MainMenu[] =
    {
        { "Asub", sub0, "Go inside first submenu" },
        { "Bsub", sub1, "Go inside second submenu" },
        { "", (FUNC)0, "" }   /* always add this as the last item! */
    };
    startmenu(MainMenu, "TUI - 'textual user interface' demonstration program");

    return 0;
}

虽然它编译成功,但它在运行时抛出一个错误,这表明一个错误的指针:

0xC0000005: Access violation reading location 0x021c52f9

在线

startmenu(MainMenu, "TUI - 'textual user interface' demonstration program");

不知道从这里去哪里。再次感谢。

4

2 回答 2

0

如果我没记错的话(我很容易记错),那是因为 C/C++ 的调用约定不同。尝试使回调外部“C”,并使它们调用 C++ 函数。称它为蹦床:)

于 2010-06-17T00:36:08.423 回答
0

终于让它工作了。解决方案如下:

首先,我将 tui.c 重命名为 tui.cpp

对于头文件 tui.h​​,我按照此处描述的包装代码的完全相同的步骤进行操作

然后在我的项目中,我只包含了没有任何外部“C”块的标题

#include "tui.h"

编译成功!

于 2010-06-17T11:00:09.377 回答