类返回值错误

时间:2012-12-29 15:18:26

标签: c++ class object

大家好我有一个合乎逻辑的问题......我必须做一个有点迷宫的工作,但是我会尝试用类来做...所以这就是。

我在main之外有一个函数叫做void playeraction();

cout<<"\nAction : ";
cin>>action;

int prevX=posX;
int prevY=posY;
unsigned char space = {32};

switch (action)
{
    case 'a':
        if(grid[posX][posY-1]!='#')
        {
            posY--;
            grid[prevX][prevY]=space;
            system("cls");
            break;
        }

当这样的角色移动没有任何问题 现在,当我尝试implimenet类时,它没有

    case 's':

        if(grid[posX+1][posY]!='#')
        {
            Dragon obj;
            obj.moveSouth(posX);
            grid[prevX][prevY]=space;
            system("cls");
            break;
        }

in dragon cpp

int Dragon::moveSouth(int posX)
{
    return posX++;
}

为什么它不返回posX++ ??

的任何想法

3 个答案:

答案 0 :(得分:1)

在您的代码中,存在一些错误。

首先,对于'posX ++',posX在使用其值后会增加。在使用之前,你应该使用++ posX来增加它。

其次,在函数中,其参数的内存在堆栈上。它们是临时的,不是变量的原始记忆。

您可以使用此代码的参考。

void Dragon::moveSouth(int & posX){

    posX++;

}

答案 1 :(得分:0)

因为您没有将返回值分配给任何变量。试试这个:

int newSouth = obj.moveSouth(posX);

这将为newSouth分配新的posX值。

编辑:您还必须修改您的moveSouth函数,正如Mats Petersson在第一条评论中提到的那样。

int Dragon::moveSouth(int posX){

 int newX = posX++;
 return newX;

}

但是,如果您想要增加原始posX而不是重新获得新值,只需使用对posX的引用,如另一个答案中Yuan所述。

答案 2 :(得分:0)

您的函数不会修改任何类型的内部或外部变量,它只返回一个永远不会被捕获的值。有很多解决方案,

  • 创建内部类变量以跟踪位置,仅调用函数来修改地图上的位置。

class dragon
{
    //...
    void moveDragon(int num, int num2);
    private:
        int posX;
        int posY;
}

void dragon::moveDragon(int num, int num2)
{
    posX -= num;
    posY -= num2;
}
  • 让函数返回为函数
  • 减去的相同值

posX = obj.MoveSouth(posX); //new posX now holds the value