2

我正在制作一个非常简单的平台独立(至少这是计划)控制台应用程序。我从 conio.h 更改为 pdCurses 以实现它。问题在于,在 Windows 中,使用 Codeblocks 和 gcc 我遇到了问题。

当我包括在内时,我会遇到大量错误。它们都涉及 3 个宏,它们都位于内部不同的源文件中:

CodeBlocks\MinGW\bin..\lib\gcc\mingw32\3.4.5........\include\c++\3.4.5\bits\

如果我像这样取消定义这 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 函数时,我也会得到对各种事物的未定义引用。我不明白为什么。我肯定正确地链接了图书馆。例如,通过尝试在屏幕上回显一个字符,我得到:

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 的链接有什么问题?

-左撇子

4

2 回答 2

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 它将跳过定义所有宏。据我看,它们都只是标准屏幕的便利宏,所以你真的不会失去任何功能,但你必须使用明确需要屏幕变量的函数。或者,我想,使用您自己的没有名称冲突的宏。

于 2009-07-16T18:05:23.980 回答
0

答:我不知道为什么会出现问题(在带有 PDCurses 的 MSVC 中不会发生),但是“正确的方法”是实现您自己的具有正确指令的标头并包含该标头。

B. 对我来说似乎是一个链接错误,但你为什么不显示相应的代码?

于 2009-07-16T17:55:45.683 回答