gpt4 book ai didi

c++ - pdCurses 在 Windows 中使用,与 3 个 gcc 宏混淆

转载 作者:可可西里 更新时间:2023-11-01 10:40:47 28 4
gpt4 key购买 nike

我正在制作一个非常简单的平台独立(至少这是计划)控制台应用程序。我从 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 函数时,我也会得到对各种事物的 undefined reference 。我不明白为什么。我绝对正确地链接了库。例如,通过尝试在屏幕上回显一个字符,我得到:

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

-左撇子

最佳答案

对于宏问题,在 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 它将跳过定义所有宏。据我所知,它们都只是标准屏幕的便捷宏,因此您确实不会失去任何功能,但您必须使用明确需要屏幕变量的功能。或者,我想,使用您自己的没有名称冲突的宏。

关于c++ - pdCurses 在 Windows 中使用,与 3 个 gcc 宏混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1139067/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com