无法从新函数中修改类变量 对C++和编程我还是比较新的,但有很好的时间学习。我正在编写一个小的、非常简单的ncurses程序,到目前为止,它只需使用WASD键在屏幕上移动一个
问题是我无法在第一次函数更新中更改player.x 代码如下:无法从新函数中修改类变量 对C++和编程我还是比较新的,但有很好的时间学习。我正在编写一个小的、非常简单的ncurses程序,到目前为止,它只需使用WASD键在屏幕上移动一个,c++,class,variables,ncurses,C++,Class,Variables,Ncurses,问题是我无法在第一次函数更新中更改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 {
#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;
}
任何输入都会有帮助 更新中没有声明玩家。为了使其工作,您需要能够访问main中声明的player变量。为此,需要通过指针或引用传递变量以进行更新
大体上:
Update(player);
将更新的签名更改为:
void Update(Player& player);
这将通过引用传递类型为player的名为player的对象进行更新。更新中未声明任何player。为了使其工作,您需要能够访问main中声明的player变量。为此,需要通过指针或引用传递变量以进行更新
大体上:
Update(player);
将更新的签名更改为:
void Update(Player& player);
这将通过引用传递名为player类型的player的对象进行更新。更新函数如何知道应该修改的对象?您创建了一个名为Player的播放器,但没有将其交给更新函数。更新函数如何知道它应该修改什么对象?你创建一个名为Poor的播放器,但是你不把它给更新函数。 < P> C++中的所有变量都与一个作用域相关联。将范围视为该变量的可见性。在这种情况下,播放器仅在声明为main的函数中可见。若要更新播放器,您必须增加其范围并使其成为全球性的坏主意,或者b。把它传递给你的函数
如果您更改了更新以获取玩家参考,您可以完成您的尝试。新的声明看起来像这个“空更新播放器和播放器”,然后当你在实例< p>中调用你的更新函数PASS时,C++中的所有变量都与一个作用域相关联。将范围视为该变量的可见性。在这种情况下,播放器仅在声明为main的函数中可见。若要更新播放器,您必须增加其范围并使其成为全球性的坏主意,或者b。把它传递给你的函数
如果您更改了更新以获取玩家参考,您可以完成您的尝试。新的声明类似于“void UpdatePlayer&player”,那么当您在实例中调用更新函数pass时您不能更改player.x是什么意思?它会给你一个编译时错误吗?它在运行时什么都不做吗?您是否尝试添加调试打印?您可能希望检查屏幕边框,以便不在屏幕外绘制。很抱歉,乔纳森,我忘记指定编译器正在运行。此范围中未定义x。还有,我以后会这样做-你不能更换玩家是什么意思?它会给你一个编译时错误吗?它在运行时什么都不做吗?您是否尝试添加调试打印?您可能希望检查屏幕边框,以便不在屏幕外绘制。很抱歉,乔纳森,我忘记指定编译器正在运行。此范围中未定义x。还有,我以后会这样做-这真是太棒了,感谢所有给出这个解决方案的人!我让它工作了,现在更好地理解了课堂!这真是太棒了,感谢所有给出这个解决方案的人!我让它工作了,现在更好地理解了课堂!