无法从新函数中修改类变量

时间:2012-03-26 01:54:31

标签: c++ class variables ncurses

我还是比较新的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;
}

任何输入都会有所帮助!

3 个答案:

答案 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函数。