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

标签 c++ class struct position ncurses

我正在使用 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);

关于c++ - 将光标位置存储在类对象中(ncurses c++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50196194/

相关文章:

c++ - 如何使用命名空间中单独 header 中定义的类

c - 尝试在 c 排序结构中实现快速排序

c++ - ADO 不支持存储过程中的 XML

c++ - 用 C++ 解析 Exuberant Ctags

c++ - OpenCL 文件无法在 OS X 上编译

php - PDO 和类给出 fatal error : Call to a member function query()

c++ - 什么是复制省略和返回值优化?

java - 返回扩展抽象基类的具体类的类,而不是实例?

struct - 为什么编译器在结构成员未读时不发出警告?

c++ - 将新值放入数组 C++ 时即时排序