我还是比较新的C ++和编程,但是学习很开心。我正在写一个小的,非常简单的ncurses程序,到目前为止,只需使用WASD键在屏幕上移动一个“#”。
问题是我无法在第一个函数Update()中更改player.x。
以下是代码:
#include <iostream>
#include <ncurses.h>
using namespace std;
class Player
{
public:
int x;
int y;
};
void Update()
{
int z;
z = getch();
if(z == 97) //A key
{
player.x--;
}
if(z == 100) //D key
{
player.x++;
}
if(z == 119) //W key
{
player.y--;
}
if(z == 115) //S key
{
player.y++;
}
}
void Draw(int xPos, int yPos)
{
clear();
mvprintw(yPos,xPos,"#");
refresh();
}
int main()
{
initscr();
noecho();
int doContinue;
Player player;
do
{
Update();
Draw(player.x, player.y);
}while((doContinue=getch()) != 27);
endwin();
return 0;
}
任何输入都会有所帮助!
答案 0 :(得分:4)
c ++中的所有变量都与范围相关联。将范围视为该变量的可见性。在这种情况下,播放器仅在声明的函数中可见,其中main是main。要更新播放器,您必须增加其范围并使其全局(坏主意)或b。把它传递给你的功能。
如果您更改了Update
以获取玩家参考,则可以完成您的尝试。新声明看起来像'void Update(Player&amp; player)`然后当你在实例中调用你的更新函数时传递
答案 1 :(得分:1)
player
中未声明Update()
。为了使其正常工作,您需要能够访问player
中声明的main
变量。为此,您需要通过指针或引用将变量传递给Update
。
主要:
Update(player);
将更新的签名更改为:
void Update(Player& player);
这会将player
类型的Player
对象通过引用传递给Update
。
答案 2 :(得分:0)
Update
函数如何知道它应该修改哪个对象?您创建了一个名为Player
的{{1}},但是您没有将其提供给player
函数。