局部变量超出范围..我认为
Local variables going out of scope ... I think
我对下面的代码有问题。除了XCoord
和YCoord
变量外,我的一切都运行良好。在ChangePosition
方法中,如果 25 不等于 50,我想将 25 添加到XCoord
,然后将XCoord
重置为 0,如果XCoord = 50
和YCoord isnt equal to 50
,则向YCoord
添加 25。
我通过调试发现,当ChangePosition
方法返回XCoord
并YCoord
当调试器继续执行switch
语句时,它们会恢复到0
。我认为这与XCoord
有关,YCoord
超出范围(不是 100% 确定这是否是实际问题)return XCoord, YCoord
语法是否合法? 我正在使用Visual Studio,并没有说它是错误的,但我只是不确定。
我认为这一定是变量没有变化的上述 2 个原因之一。 我尝试使用LoadLevel
方法中的 2 个变量初始化结构Coords coords;
并将结构传递到ChangePosition
方法中,但随后我必须将变量声明为静态整数,然后导致LNK2001错误:我认为这与尝试使用Coords::XCoord += 25
调整变量有关。但是我无法使用coords.XCoord
,因为结构没有在 ChangePosition 方法中声明,所以我收到一个关于未识别类型名的错误(类似的东西)。
void TileMap::LoadLevel(HINSTANCE hInstance)
{
LPCSTR szFileName1("..\Assets\TILE_01.bmp");
LPCSTR szFileName2("..\Assets\Tile_02.bmp");
LPCSTR szFileName3("..\Assets\Tile_03.bmp");
Sprite* Tile_01 = new Sprite(); /*Tile_01 is the grass sprite*/
Sprite* Tile_02 = new Sprite(); /*Tile_02 is the wall sprite*/
Sprite* Tile_03 = new Sprite(); /*Tile_03 is the end point sprite*/
int XCoord = 0;
int YCoord = 0;
const int Columns = 3;
const int Rows = 3;
char MazeMap[Rows][Columns] = {
{1,2,3},
{1,2,3},
{1,2,3}
};
for (int x = 0; x < Rows; x++)
{
for (int y = 0; y < Columns; y++)
{
switch (MazeMap[x][y])
{
case GRASS: /*TILE_01*/
Tile_01->Create(DirectDraw::GetInstance()->GetDDObject(), 25, 25, 0);
Tile_01->LoadSprite(hInstance, szFileName1, XCoord, YCoord, 25, 25);
Tile_01->Draw(DirectDraw::GetInstance()->GetBackBuffer(), XCoord, YCoord, 25, 25); //Draw Tile
ChangePosition(XCoord, YCoord); //Change position
break;
case WALL: /*TILE_02*/
Tile_02->Create(DirectDraw::GetInstance()->GetDDObject(), 25, 25, 0);
Tile_02->LoadSprite(hInstance, szFileName2, XCoord, YCoord, 25, 25);
Tile_02->Draw(DirectDraw::GetInstance()->GetBackBuffer(), XCoord, YCoord, 25, 25); //Draw Tile
ChangePosition(XCoord, YCoord); //Change position
break;
case END: /*TILE_03*/
Tile_03->Create(DirectDraw::GetInstance()->GetDDObject(), 25, 25, 0);
Tile_03->LoadSprite(hInstance, szFileName3, XCoord, YCoord, 25, 25);
Tile_03->Draw(DirectDraw::GetInstance()->GetBackBuffer(), XCoord, YCoord, 25, 25); //Draw Tile
ChangePosition (XCoord, YCoord); //Change position
break;
}
}
}
}
/*
This method changes the XCoord and YCoord to pass into the sprite draw method
so the tile is drawn in the correct position
*/
int TileMap::ChangePosition(int XCoord, int YCoord)
{
if (XCoord != 50) //if (XCoord != screenWidth) //Change position
{
XCoord += 25;
}
else if (XCoord == 50 && YCoord != 50) //else if (XCoord == screenWidth && YCoord != screenHeight)
{
XCoord = 0;
YCoord += 25;
}
return XCoord, YCoord
}
默认情况下,函数参数按值传递。这意味着,当您在函数中分配参数变量时,它们对调用方的变量没有影响。
您可以更改函数以通过引用获取其参数。然后赋值将修改调用方的变量。
void TileMap::ChangePosition(int &XCoord, int &YCoord)
{
if (XCoord != 50) //if (XCoord != screenWidth) //Change position
{
XCoord += 25;
}
else if (XCoord == 50 && YCoord != 50) //else if (XCoord == screenWidth && YCoord != screenHeight)
{
XCoord = 0;
YCoord += 25;
}
}
您不需要从此函数返回任何内容,因为它会修改参数。我已将其更改为void
函数。
return XCoord, YCoord;
是有效的语法,但它不会按照您的想法进行操作。请参阅逗号运算符的工作原理
- 使用的未初始化局部变量'Quick'
- 修复未初始化的局部变量错误
- 局部变量保留函数中的值
- 如何使用 C++ 中的继承函数访问派生类中的局部变量
- 将引用分配给局部变量,如果局部变量超出范围,它会超出范围吗?
- C++中静态方法的局部变量范围
- 离开范围后如何保护局部变量的值?
- 在其范围之外使用局部变量
- 将局部变量保存到全局向量中,为什么离开局部范围后可以得到这些局部变量?
- 尝试声明函数的局部变量,但得到范围错误
- 局部变量超出范围..我认为
- 变量循环范围会导致返回局部变量的地址引用
- C++ 中静态局部变量的范围和生存期
- 从 Outsie it 范围 C++ 访问局部变量
- 在范围内存在不可复制的局部变量时按值捕获
- Lambdas和引用捕获局部变量:在范围之后访问
- 指针可以将局部变量的内存指向其范围之外?
- 是否可以在其范围之外访问局部变量的内存?
- 如何在C++的另一个范围内使用局部变量
- 在类范围内声明与类属性同名的局部变量