对于循环只是......没有开始?

时间:2011-06-19 18:19:59

标签: c++ loops for-loop

这是一个奇怪的问题。我有一个执行for循环的void函数,没有别的东西,但for循环不会启动,即使函数被调用。这是功能:

void Cell::Consolidate()
{
    cout << "Consolidating (outside)...\n";
    for(int i = 0; i < m_Tiles.size(); ++i)
    {
        cout << "Consolidating (inside)...\n";
        int row = m_Tiles[i]->GetRow();
        int col = m_Tiles[i]->GetCol();
        //Check below.
        if((*m_pTileMap)[row + 1][col].pParentCell != this)
        {
            m_EdgeTiles.push_back(m_Tiles[i]);
            m_Tiles[i]->SetColor(sf::Color(100, 100, 100));
            bool newNeighbor = true;
            for(int j = 0; j < m_Neighbors.size(); ++j)
            {
                if(m_Neighbors[j] == (*m_pTileMap)[row + 1][col].pParentCell)
                {
                    newNeighbor = false;
                    break;
                }
            }
            if(newNeighbor)
            {
                m_Neighbors.push_back((*m_pTileMap)[row + 1][col].pParentCell);
            }
        }
        //Check above.
        else if((*m_pTileMap)[row - 1][col].pParentCell != this)
        {
            m_EdgeTiles.push_back(m_Tiles[i]);
            m_Tiles[i]->SetColor(sf::Color(100, 100, 100));
            bool newNeighbor = true;
            for(int j = 0; j < m_Neighbors.size(); ++j)
            {
                if(m_Neighbors[j] == (*m_pTileMap)[row - 1][col].pParentCell)
                {
                    newNeighbor = false;
                    break;
                }
            }
            if(newNeighbor)
            {
                m_Neighbors.push_back((*m_pTileMap)[row - 1][col].pParentCell);
            }
        }
        //Check the right.
        else if((*m_pTileMap)[row][col + 1].pParentCell != this)
        {
            m_EdgeTiles.push_back(m_Tiles[i]);
            m_Tiles[i]->SetColor(sf::Color(100, 100, 100));
            bool newNeighbor = true;
            for(int j = 0; j < m_Neighbors.size(); ++j)
            {
                if(m_Neighbors[j] == (*m_pTileMap)[row][col + 1].pParentCell)
                {
                    newNeighbor = false;
                    break;
                }
            }
            if(newNeighbor)
            {
                m_Neighbors.push_back((*m_pTileMap)[row][col + 1].pParentCell);
            }
        }
        //Check the left.
        else if((*m_pTileMap)[row][col - 1].pParentCell != this)
        {
            m_EdgeTiles.push_back(m_Tiles[i]);
            m_Tiles[i]->SetColor(sf::Color(100, 100, 100));
            bool newNeighbor = true;
            for(int j = 0; j < m_Neighbors.size(); ++j)
            {
                if(m_Neighbors[j] == (*m_pTileMap)[row][col - 1].pParentCell)
                {
                    newNeighbor = false;
                    break;
                }
            }
            if(newNeighbor)
            {
                m_Neighbors.push_back((*m_pTileMap)[row][col - 1].pParentCell);
            }
        }
    }
}

当我运行该程序时,"Consolidating (outside)...\n"会被发送到cout,但"Consolidating (inside)...\n"没有。在循环中应该发生的任何事情都不会发生(例如,SetColor()调用不执行任何操作,如果我在循环中的其他任何地方向cout发送内容也不会发生任何事情),所以我只能假设循环根本没有开始。为什么不?什么可能导致这种情况?

2 个答案:

答案 0 :(得分:7)

i < m_Tiles.size()

这个循环条件在入口上被检查到循环,不仅在每次迭代之后。如果您的m_Tiles向量为空,那么就没有循环。

答案 1 :(得分:0)

最有可能的是,m_Tiles.size()返回负值或零值。