2010-06-15 62 views
1

我已經下載了pdcurses源代碼,並且能夠在我的項目中成功地包含curses.h,鏈接了預編譯的庫和所有好的東西。PDCurses TUI C++ Win32控制檯應用程序 - 訪問衝突讀取位置

經過幾個小時的試用庫之後,我看到了demos文件夾中的tuidemo.c,將它編譯成可執行文件並且非常棒!正是我的項目所需要的。

現在的問題是,它是一個C代碼,我工作的一個C++項目在VS C++ 2008

我需要的文件是tui.c和tui.h​​ 我怎麼能包括將c文件在我的C++代碼?我看到了few suggestions here

但編譯器不太滿意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 

at線

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

不知道該從哪裏下去。 再次感謝。

+1

您是否將tui.c重命名爲tui.cpp?如果是這樣,不要 - 編譯器需要知道它是一個C源文件。除此之外,發佈您正在獲取的錯誤消息的示例。 – 2010-06-15 11:28:22

回答

0

終於搞定了。解決的辦法是在下面的步驟:

首先我改名tui.c到tui.cpp

有關header tui.h​​,我隨後如所述包裹代碼的確切相同步驟here.

然後在我的項目,我只是包含了頭,沒有任何的extern「C」塊

#include "tui.h" 

編譯和它的工作!

0

如果我沒有弄錯(而且我可能很容易),這是由於C/C++調用約定的不同所致。嘗試使回調extern「C」,並讓他們調用C++函數。稱它爲蹦牀:)