我正在创建一个非常简单的平台(至少是计划)控制台应用程序。我从conio.h更改为pdCurses以实现它。问题是在Windows中,使用Codeblocks和gcc我遇到了问题。
当我加入时,我会遇到大量错误。它们都涉及3个宏,它们都位于不同的源文件中:
码块\ MinGW的\ BIN .. \ lib中\ GCC \的mingw32 \ 3.4.5 ........ \包括\ C ++ \ 3.4.5 \位\
如果我取消这样的3个宏:
#include <curses.h>
#undef move
#undef erase
#undef clear
然后所有编译好。如果我不unf然后我得到关于这些宏的大量错误。
示例错误是:
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
答案 0 :(得分: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 */
也许你可以找到解决方法。
编辑:在我的副本中,如果#define NCURSES_NOMACROS,它将跳过定义所有宏。据我所知,所有这些只是标准屏幕的便利宏,所以你真的不会失去任何功能,但你必须使用明确需要屏幕变量的功能。或者,我想,使用你自己的没有名字冲突的宏。答案 1 :(得分:0)
一个。我不知道为什么会出现这个问题(在使用PDCurses的MSVC中不会发生这种情况),但“正确的方法”是实现自己的标头,该标头具有正确的指令并包含该标题。
B中。看起来像是一个链接错误,但为什么不显示相应的代码?