استخدام PDCURSES في Windows، فوضى مع 3 وحدات ماكرو دولية

StackOverflow https://stackoverflow.com/questions/1139067

  •  16-09-2019
  •  | 
  •  

سؤال

أنا أقدم تطبيق وحدة التحكم المستقلة منصة للغاية (على الأقل هذه الخطة). لقد تغيرت من Conio.h إلى PDCURS لجعل ذلك يحدث. المشكلة في ذلك هي أنه في Windows، باستخدام CodeBlocks و GCC لدي مشكلة.

عندما أدرج أحصل على الكثير من الأخطاء. انهم جميعا قلق 3 وحدات الماكرو جميعها في ملفات مصدر مختلفة في الداخل:

CodeBlocks Mingw bin .. Lib GCC MingW32 3.4.5 ........ تشمل C ++ 3.4.5 Bits

إذا قمت بالتحكم في تلك الماكرو الثلاثة مثل هذا:

#include <curses.h>


#undef move
#undef erase
#undef clear

ثم كل الجواه جيدا. إذا لم أفعل UNDEV، أحصل على أطنان من الأخطاء حول وحدات الماكرو هذه.

مثال الأخطاء هي:

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 من الأخطاء المذكورة أعلاه؟

-الفتريس

هل كانت مفيدة؟

المحلول

بالنسبة لمشكلة ماكرو، قم بعمل البحث عن "STL" في ملف CONSESS.H ويجب أن تجد:

#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، فسوف تخطي تحديد جميع وحدات الماكرو. بقدر ما نظرت بكل منهم فقط وحدات ماكرو مجانية للشاشة القياسية بحيث لا تفقد أي وظيفة حقا ولكن عليك استخدام الوظائف التي تتطلب صراحة متغير الشاشة. أو، أفترض، استخدم وحدات الماكرو الخاصة بك التي لا تحتوي على اشتباكات اسم.

نصائح أخرى

أ. لا أعرف لماذا المشكلة موجودة (لا يحدث في MSVC مع pdcurses)، ولكن "الطريقة الصحيحة" هي تطبيق رأسك الخاص له التوجيهات الصحيحة وتشمل ذلك بدلا من ذلك.

ب. يبدو وكأنه خطأ ربط لي، ولكن لماذا لا تظهر الكود المقابل؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top