无法从新函数中修改类变量 对C++和编程我还是比较新的,但有很好的时间学习。我正在编写一个小的、非常简单的ncurses程序,到目前为止,它只需使用WASD键在屏幕上移动一个

无法从新函数中修改类变量 对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 {

问题是我无法在第一次函数更新中更改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;
}
任何输入都会有帮助

更新中没有声明玩家。为了使其工作,您需要能够访问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。还有,我以后会这样做-这真是太棒了,感谢所有给出这个解决方案的人!我让它工作了,现在更好地理解了课堂!这真是太棒了,感谢所有给出这个解决方案的人!我让它工作了,现在更好地理解了课堂!