繁体   English   中英

将光标位置存储在类对象中(ncurses C ++)

[英]Store cursor position in class object (ncurses c++)

我正在使用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初始化的另一个结构中,但如何将x和y位置直接存储在类数据成员中?

谢谢。

最快的解决方案是更改getHeroPosition以返回引用而不是值:

coordinateYX& Rogue::getHeroPosition() {return heroPosition;}

问题出在这里,您尝试分配给Rogue职位:

getyx(stdscr, Hero.getHeroPosition().y, 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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM