1

大家好,我有一个逻辑问题......我不得不做一个迷宫,它可以工作,但我试图用类来做......所以就在这里。

我在 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;
        }

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

    case 's':

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

在龙cpp

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

任何想法为什么它不返回posX++

4

3 回答 3

1

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

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

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

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

void Dragon::moveSouth(int & posX){

    posX++;

}
于 2012-12-29T15:23:22.297 回答
0

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

int newSouth = obj.moveSouth(posX);

这将分配给newSouthposX值。

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

int Dragon::moveSouth(int posX){

 int newX = posX++;
 return newX;

}

但是,如果您不想返回一个新值,而是想增加 original posX,只需使用对 posX 的引用,正如 Yuan 在另一个答案中提到的那样。

于 2012-12-29T15:21:12.027 回答
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
于 2012-12-29T15:27:50.933 回答