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

Shounak Ray

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++将包含多态属性的类对象存储在堆栈中

来自分类Dev

将 ncurses 光标位置存储为变量

来自分类Dev

C#如何将光标放在richtextbox中的位置

来自分类Dev

创建类型为<派生类>的变量以将<基类>对象存储在C#中

来自分类Dev

将对象的位置设置为与Visual C#中的光标位置相同

来自分类Dev

将块对象存储在目标C中

来自分类Dev

C中静态和外部存储类的内存位置

来自分类Dev

将继承自类模板的类存储在C ++ Vector中

来自分类Dev

如何找到存储在 C++ 向量中的对象的类方法?

来自分类Dev

将对象数组存储在其自己的类C ++中

来自分类Dev

将类中的函数存储在数组中并调用C ++

来自分类Dev

将C对象数组包装到C ++类中

来自分类Dev

尝试将复杂的数组存储到类C ++中

来自分类Dev

C ++将类的静态方法存储在unordered_map中

来自分类Dev

将 JSON 响应存储在 C# 类中

来自分类Dev

将固定的已知数据存储在类中(C ++)

来自分类Dev

将C#对象存储到AutoCAD实体的XRecord中

来自分类Dev

C ++将坐标存储为向量中的对象进行排序

来自分类Dev

在C ++ 11 / C ++ 14中的类中存储对象类型的列表/映射

来自分类Dev

C中的静态存储类

来自分类Dev

将大括号内的“ this”传递给C ++中的类的对象

来自分类Dev

自动将类成员注册到C ++中的包含对象

来自分类Dev

将类对象直接读入 C++ 中的向量

来自分类Dev

将类对象传递到模板函数中。C ++

来自分类Dev

在C++中将抽象基类的不同派生类的对象存储在数组中

来自分类Java

对象在C#中的位置?

来自分类Dev

将大对象存储在内存中还是在C#中仅存储指向它的指针?

来自分类Dev

将类对象推送到容器时,C++ 在堆栈或堆中创建类对象?

来自分类Dev

C#:将基类集合对象复制到派生类对象中

Related 相关文章

  1. 1

    C ++将包含多态属性的类对象存储在堆栈中

  2. 2

    将 ncurses 光标位置存储为变量

  3. 3

    C#如何将光标放在richtextbox中的位置

  4. 4

    创建类型为<派生类>的变量以将<基类>对象存储在C#中

  5. 5

    将对象的位置设置为与Visual C#中的光标位置相同

  6. 6

    将块对象存储在目标C中

  7. 7

    C中静态和外部存储类的内存位置

  8. 8

    将继承自类模板的类存储在C ++ Vector中

  9. 9

    如何找到存储在 C++ 向量中的对象的类方法?

  10. 10

    将对象数组存储在其自己的类C ++中

  11. 11

    将类中的函数存储在数组中并调用C ++

  12. 12

    将C对象数组包装到C ++类中

  13. 13

    尝试将复杂的数组存储到类C ++中

  14. 14

    C ++将类的静态方法存储在unordered_map中

  15. 15

    将 JSON 响应存储在 C# 类中

  16. 16

    将固定的已知数据存储在类中(C ++)

  17. 17

    将C#对象存储到AutoCAD实体的XRecord中

  18. 18

    C ++将坐标存储为向量中的对象进行排序

  19. 19

    在C ++ 11 / C ++ 14中的类中存储对象类型的列表/映射

  20. 20

    C中的静态存储类

  21. 21

    将大括号内的“ this”传递给C ++中的类的对象

  22. 22

    自动将类成员注册到C ++中的包含对象

  23. 23

    将类对象直接读入 C++ 中的向量

  24. 24

    将类对象传递到模板函数中。C ++

  25. 25

    在C++中将抽象基类的不同派生类的对象存储在数组中

  26. 26

    对象在C#中的位置?

  27. 27

    将大对象存储在内存中还是在C#中仅存储指向它的指针?

  28. 28

    将类对象推送到容器时,C++ 在堆栈或堆中创建类对象?

  29. 29

    C#:将基类集合对象复制到派生类对象中

热门标签

归档