كيف يمكنني عرض سلاسل متغيرة باستخدام C ++ و PDCurses؟
سؤال
أنا آسف للغاية لنشر هذا السؤال الجديد بشكل محرج ، لكنني لم أتجول كثيرًا مع C ++ منذ أيام دراستي الجامعية وأعتقد في مرحلة ما أني شربت كل ما عرفته عن المؤشرات وسلاسل C ++ مباشرة من رأسي. في الأساس ، أقوم بإنشاء تطبيق وحدة التحكم C ++ (Roguelike ، ليكون دقيقًا) مع PDCurses للتعامل مع الإخراج. أريد أن أعرض سلاسل ديناميكية (شيء أظن أنه سيكون مفيدًا جدًا في لعبة ديناميكية ، HEH) ولكن MVADDSTR () يستمر في رمي أخطاء. إليك مثال على ما أحاول القيام به:
string vers = "v. ";
vers += maj_vers;// + 48;
vers += ".";
vers += min_vers;// + 48;
vers += ".";
vers += patch_vers;// + 48;
char *pvers = vers.c_str();
mvaddstr(5,17, pvers);
refresh();
بالطبع ، هذا يعطيني "تحويل غير صالح من const char*' to
char *'"خطأ في تعريف char *pvers. أعرف أنني أفعل شيئًا بوقاحة ، خاطئ للغاية هنا ، لكنني صدئ حقًا في هذا الأمر. أي مساعدة ستكون مفيدة للغاية.
المحلول
فقط أعلن pvers
كما:
const char *pvers = vers.c_str();
هذه const
يعني أنك لن تقوم بتعديل الذاكرة المشار إليها pvers
. إنه حقًا أكثر من تلميح حتى يتمكن المترجمات من الصراخ عليك إذا كسرت هذا الافتراض. (ولهذا السبب حصلت على تحذير المترجم.) قد تبدأ في رؤية شيء غير تقليدي إذا كنت تستخدم pvers
بعد التغيير vers
وراء هذا الخط ، ولكن بالنسبة للمقتطف الذي نشرته ، لا أرى هذه المشكلة.
نصائح أخرى
Asveikau على حق ، لكنني وجدت خيارًا آخر من خلال البحث من خلال بعض وثائق Ncurses - يمكنني دائمًا فقط mvprintw(col, row, "v. %d.%d.%d", maj_vers,min_vers,patch_vers)
لنفس التأثير.