首页 文章

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

提问于
浏览
1

这是一个奇怪的问题 . 我有一个执行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 回答

  • 7
    i < m_Tiles.size()
    

    不仅在每次迭代之后,在进入循环时检查该循环条件 . 如果你的 m_Tiles 向量是空的,那么,没有循环 .

  • 0

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

相关问题