在类对象中存储光标位置(ncurses c+;+;) < >我使用QtCu饰器编译我的C++代码和 库。< /P>

在类对象中存储光标位置(ncurses c+;+;) < >我使用QtCu饰器编译我的C++代码和 库。< /P>,c++,class,struct,position,ncurses,C++,Class,Struct,Position,Ncurses,假设我们有以下类定义(.h): 和(.cpp): 在my main.cpp中,我试图将当前光标位置存储到Rogue的实例化中: Rogue Hero; getyx(stdscr, Hero.getHeroPosition().y, Hero.getHeroPosition().x); 但我总是会出错: using temporary as lvalue [-fpermissive] 下面还显示了文件中错误的一部分 #define getyx(w, y, x) (y = getcury

假设我们有以下类定义(.h):

和(.cpp):

在my main.cpp中,我试图将当前光标位置存储到Rogue的实例化中:

Rogue Hero;
getyx(stdscr, Hero.getHeroPosition().y, Hero.getHeroPosition().x);
但我总是会出错:

using temporary as lvalue [-fpermissive]
下面还显示了
文件中错误的一部分

#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);

@德雷舍姆,我向你道歉。我已经用正确的错误信息编辑了原始帖子。谢谢!返回别名似乎解决了我的问题。但是,现在我实际上无法获得值,因为
print(playerCoordinate,Hero.getHeroPosition().y)
(其中print函数仅在坐标处打印int)不起作用。任何解决方案,所以我的get函数可以同时使用?我尝试过重载,但也不起作用。在什么方面它“不起作用”?你有什么错误?我想不出为什么不应该。你可以用我的替代方案。
Hero.getHeroPosition().y = getcury(stdscr);
Hero.getHeroPosition().x = getcurx(stdscr);
coordinateYX position;
getyx(stdscr, position.X, position.Y);
Hero.setPosition(position);