2009-07-16 38 views
2

我正在製作一個非常簡單的平臺獨立(至少這是計劃)控制檯應用程序。我從conio.h更改爲pdCurses,使其發生。問題在於,在Windows中,使用Codeblocks和gcc我有一個問題。pdCurses在Windows中使用,使用3 gcc宏混亂

當我包括我得到噸錯誤。它們都涉及位於不同源文件中的3個宏:

CodeBlocks \ MinGW \ bin .. \ lib \ gcc \ mingw32 \ 3.4.5 ........ \ include \ C++ \ 3.4.5 \位\

如果我未定義的3個宏是這樣的:

#include <curses.h> 


#undef move 
#undef erase 
#undef clear 

那麼所有的編譯好。如果我不確定,那麼我會得到關於這些宏的大量錯誤。

例的錯誤是:

macro "move" passed 3 arguments, but takes just 2| 
\bits\char_traits.h|185|error: invalid function declaration| 
\bits\basic_string.h|604|error: expected `)' before '->' token| 
\bits\basic_string.h|1039|macro "erase" passed 2 arguments, but takes just 0| 

任何人有任何想法,爲什麼出現這種情況?而任何不那麼可惡的方式來糾正這個問題?預先感謝您的意見。

編輯:當我調用任何pdcurses函數時,我也獲得了對各種東西的未定義引用。我不明白爲什麼。我明確地鏈接了這個庫。例如,通過試圖呼應屏幕,我得到一個char:

main.cpp|74|undefined reference to `__imp__SP'| 
main.cpp|74|undefined reference to `__imp__stdscr'| 
main.cpp|74|undefined reference to `__imp__stdscr'| 

它可以比圖書館的不良鏈接其他什麼嗎?我怎麼能看到從上面的錯誤鏈接pdcurses有什麼問題?

-Lefteris

回答

1

對於宏觀問題,請在curses.h文件「STL」的搜索,你會發現:

#ifdef __cplusplus 
#ifndef NCURSES_NOMACROS 
/* these names conflict with STL */ 
#undef box 
#undef clear 
#undef erase 
#undef move 
#undef refresh 

#endif /* NCURSES_NOMACROS */ 

也許你可以找到周圍工作這一點。

編輯:在我的副本中,如果您定義了NCURSES_NOMACROS,它將跳過定義所有的宏。就我看來,所有這些都只是標準屏幕的便利宏,因此您不會失去任何功能,但必須使用明確需要屏幕變量的功能。或者,我想,使用你自己的沒有名稱衝突的宏。

0

答:我不知道爲什麼這個問題是存在的(它不與MSVC發生PDCurses),但「有道」是實現自己的頭具有正確指令,幷包括這一點。 B.對於我來說看起來像是一個鏈接錯誤,但爲什麼不顯示相應的代碼?

+0

感謝A,我會盡力這樣做。 對於B,是的,它看起來像是一個鏈接錯誤,但我確實從代碼塊正確鏈接了庫,就像我對任何其他庫做的一樣。 至於相應的代碼,它可能是任何東西。任何pdcurses函數都會拋出這個或者一些類似的未定義的引用。 – Lefteris 2009-07-16 18:06:56