Для цикла просто ... не запускается? - PullRequest
1 голос
/ 19 июня 2011

Это странная проблема.У меня есть функция void, которая выполняет цикл for и ничего больше, но цикл 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 голосов
/ 19 июня 2011
i < m_Tiles.size()

Это условие цикла проверяется при входе в цикл, а не только после каждой итерации. Если ваш m_Tiles вектор пуст, значит, петли для вас нет.

0 голосов
/ 19 июня 2011

Скорее всего, m_Tiles.size() возвращает отрицательное значение или нулевое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...