我想提出一个非常简单的平台无关的(至少是计划)控制台应用程序。我从CONIO.H改为pdCurses做到这一点。但问题是,在Windows中,使用的码块和gcc我有一个问题。

当我包括我得到吨的错误。他们都关注3个宏所有位于不同的源文件中:

码块\ MinGW的\ BIN .. \ lib中\ GCC \的mingw32 \ 3.4.5 ........ \包括\ 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功能。我不明白为什么。我绝对正确链接库。例如,通过尝试呼应屏幕我得到的一个字符:

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的链接fromthe上述错误?

-Lefteris

有帮助吗?

解决方案

有关宏观问题,做一个搜索“STL”在curses.h文件,你会发现:

#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它会跳过定义的所有宏。至于我看着所有的人都为标准的屏幕只是很方便的宏,所以你真的不丢失任何功能,但你必须使用明确要求屏幕变量的函数。或者,我想,用自己的宏没有名称冲突。

其他提示

一个。我不知道为什么这个问题是存在的(它不MSVC发生与PDCurses),但“有道”是实现自己的头具有正确的指令,并包括代替。

B中。看起来像一个链接错误给我,但你为什么不显示相应的代码?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top