将光标位置存储在类对象中(ncurses c)
发布时间:2020-12-16 07:23:11 所属栏目:百科 来源:网络整理
导读:我正在使用QTCreator来编译我的c代码和 curses.h图书馆. 我们假设我们有以下类定义(.h): struct coordinateYX{ int y; int x; coordinateYX(long int yPos,long int xPos); coordinateYX() {}}class Rogue{private: long int health; coordinateYX heroPosi
我正在使用QTCreator来编译我的c代码和< curses.h>图书馆.
我们假设我们有以下类定义(.h): struct coordinateYX { int y; int x; coordinateYX(long int yPos,long int xPos); coordinateYX() {} } class Rogue { private: long int health; coordinateYX heroPosition; public: long int getHealth(); void setHealth(long int initHealth); void healthChange(long int vDelta); coordinateYX getHeroPosition(); void setHeroPosition(coordinateYX hPos); }; 和(.cpp): coordinateYX::coordinateYX(long int yPos,long int xPos) : y{yPos},x{xPos} {} long int Rogue::getHealth() {return health;} void Rogue::setHealth(long int initHealth) {health = initHealth;} void Rogue::healthChange(long int vDelta) {health += vDelta;} coordinateYX Rogue::getHeroPosition() {return heroPosition;} void Rogue::setHeroPosition(coordinateYX hPos) { heroPosition.y = hPos.y; heroPosition.x = hPos.x; } 在我的main.cpp中,我试图将当前光标位置存储到Rogue的实例中: Rogue Hero; getyx(stdscr,Hero.getHeroPosition().y,Hero.getHeroPosition().x); 但我总是得到一个错误: using temporary as lvalue [-fpermissive] 它还将以下内容显示为错误的一部分,该错误位于< curses.h>中.文件 #define getyx(w,y,x) (y = getcury(w),x = getcurx(w)) 虽然我可以简单地将这些值存储在main.cpp中初始化的另一个struct中,但是如何将x和y位置直接存储在类数据成员中? 谢谢. 解决方法
最快的解决方案是更改getHeroPosition以返回引用而不是值:
coordinateYX& Rogue::getHeroPosition() {return heroPosition;} 问题是你在这里试图分配到Rogue位置: getyx(stdscr,Hero.getHeroPosition().x); 这相当于: Hero.getHeroPosition().y = getcury(stdscr); Hero.getHeroPosition().x = getcurx(stdscr); 但是getHeroPosition按值返回位置(它返回一个副本,一个右值).如果为该临时副本分配值,则它将丢失.解决方案是指定对实际Rogue位置(左值)的引用. 或者,您可以使用现有的setPosition函数: coordinateYX position; getyx(stdscr,position.X,position.Y); Hero.setPosition(position); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |