变量因未知原因而更改

Variable changing for unknown reason

本文关键字:未知 变量      更新时间:2023-10-16

我有一个接一个地调用这两个方法;

m_Fence.Initialise(7);
m_Fence.CreateSquareFence();    

这是他们的每个细节;

void CFence::Initialise(int size)
{
    m_square_size = size;
}
void CFence::CreateSquareFence()
{
    int l_Vector_Pos = 0;
    //Set initial vector at origin and start of first fence
    CVector3f l_Fence_Position = CVector3f(0.0f,0.0f,0.0f);
    int l_side = 0; // Makes sure only 4 sides get created
    std::string bools[4] = {"plus_z", "plus_x", "minus_z", "minus_x"};
        //Draw 1st fence on 0 x-axis
        while(l_side < 4)
            {
                for(int i=0 ; i<=m_square_size ; i++)
                    {                   
                    //Find which direction it's going and set Fence position and add to vector
                    if(bools[l_side] == "plus_z" &&  i>0)
                        l_Fence_Position += CVector3f(0.0,0.0,beamLength);
                    else if(bools[l_side] == "plus_x" && i>0)
                        l_Fence_Position += CVector3f(beamLength,0.0,0.0);
                    else if(bools[l_side] == "minus_z" && i>0)
                        l_Fence_Position += CVector3f(0.0,0.0,-beamLength);
                    else if(bools[l_side] == "minus_x" && i>0)
                        l_Fence_Position += CVector3f(-beamLength,0.0,0.0);
                    fences[l_Vector_Pos].setPosition(l_Fence_Position);
                    l_Vector_Pos++;
                    //Increase this int to let it know what side we're creating
                    if(i == m_square_size) 
                        {
                            l_side++;
                    }
                }
            }
}

我传递 7,它最初将 m_square_size 变量更改为 7,但当我调用 CreateSquareFence 方法时,它最终变为 0,我很难理解为什么。

将我的评论变成答案

确保fences足够大,这样你就不会越界并胜过相邻的助记符(更一般地说,调用未定义的行为)。


附带说明一下,该代码似乎太复杂了。你可以这样简化它:

void CFence::CreateSquareFence()
{
  int l_Vector_Pos = 0;
  //Set initial vector at origin and start of first fence
  CVector3f l_Fence_Position = CVector3f(0.0f, 0.0f, 0.0f);
  CVector3f offsets[4] = {
    CVector3f(0.0, 0.0, beamLength),
    CVector3f(beamLength, 0.0, 0.0),
    CVector3f(0.0, 0.0, -beamLength),
    CVector3f(-beamLength, 0.0, 0.0)
  };
  for (int l_side = 0; l_side < 4; ++l_side) {
    for (int i = 0; i <= m_square_size; ++i) {
      if (i>0)
        l_Fence_Position += offsets[l_side];
      fences[l_Vector_Pos].setPosition(l_Fence_Position);
      ++l_Vector_Pos;
    }
  }
}