문제

나는 매우 간단한 플랫폼을 독립적으로 만들고 있습니다 (적어도 그 계획입니다) 콘솔 앱. 나는 conio.h에서 pdcurses로 바뀌어 그것을 일어나게했다. 문제는 Windows에서 CodeBlocks 및 GCC를 사용하여 문제가 있다는 것입니다.

내가 포함하면 많은 오류가 발생합니다. 그들은 모두 내부의 다른 소스 파일에있는 3 개의 매크로에 관한 것입니다.

CodeBlocks Mingw bin ..

내가 다음과 같은 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'|

도서관의 잘못된 연결 외에는 다른 것이 될 수 있습니까? 위의 오류에서 PDCures 연결에 무엇이 잘못되었는지 어떻게 알 수 있습니까?

-lefteris

도움이 되었습니까?

해결책

매크로 문제의 경우 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는 모든 매크로를 정의하는 것을 건너 뜁니다. 내가 보았던 한, 모든 것이 표준 화면의 편의 매크로 일 뿐이므로 실제로 기능을 잃지 않지만 화면 변수를 명시 적으로 요구하는 기능을 사용해야합니다. 또는 이름 충돌이없는 자신의 매크로를 사용한다고 생각합니다.

다른 팁

A. 문제가 왜 존재하는지 모르겠지만 (PDCurses가있는 MSVC에서는 발생하지 않음) "올바른 방법"은 올바른 지시문이있는 자신의 헤더를 구현하고 대신 포함하는 것입니다.

B. 링크 오류처럼 보이지만 해당 코드를 표시하지 않는 이유는 무엇입니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top