c++ - 将光标位置存储在类对象中(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);
推荐阅读
- mysql - 当从批处理文件调用的脚本执行时,R 的 dbConnect 因“DSN 错误”而失败
- postgresql - Postgres 查询 GROUP BY
- google-sheets - 带有正则表达式的 Google 电子表格 API setDataValidation
- android - Android 依赖 'android.arch.lifecycle:runtime' 对于编译(1.0.0)和运行时(1.1.1)类路径有不同的版本
- kubernetes-ingress - EKS Ingress(用于 ALB)在部署超过 3 个 Ingress 时没有端点
- github - Helm3 - 将图表推送到 gitlab 时校验和摘要格式无效
- sql - 如何跨 3 表连接映射一个人(每个表是一年)
- python - 如何使用 numpy 配对 (x,y) 对
- node.js - 如何使用 Vue JS 在模态窗口中定位正确的 ID?
- javascript - 将对象从 rest api 推送到数组 Angular