大家好我有一个合乎逻辑的问题......我必须做一个有点迷宫的工作,但是我会尝试用类来做...所以这就是。
我在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++
??
答案 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