C ++ - функция всегда возвращает true

0

Моя функция C++ всегда возвращает значение true. Всегда. Даже если я изменил возвращаемое значение на "false", он все равно вернет true. Я бы смеялся, но я пропустил это на сцену, где это просто не имеет смысла для меня ВСЕ.

(В случае, если кому-то интересно, код предназначен для игры в Conway Game Of Life)

#include <iostream>
#include <SFML/Graphics.hpp>


bool getCellStates(bool cells[16][16], int i, int j)
{
    int alive = 0;
    bool isAlive;

    if(cells[i][j-1] && j-1 >= 0)
        alive++;
    if(cells[i+1][j-1] && i+1 <= 15 && j-1 >= 0)
        alive++;
    if(cells[i+1][j] && i+1 <= 15)
        alive++;
    if(cells[i+1][j+1] && i+1 <=15 && j+1 <= 15)
        alive++;
    if(cells[i][j+1] && j+1 <= 15)
        alive++;
    if(cells[i-1][j+1] && i-1 >= 0 && j+1 <=15)
        alive++;
    if(cells[i-1][j] && i-1 >= 0)
        alive++;
    if(cells[i-1][j-1]&& i-1 >=0 && j-1 >= 0)
        alive++;

    if(alive == 3)
        isAlive = true;
    else if(cells[i][j] && alive == 2)
        isAlive = true;
    else
        isAlive = false;

    return isAlive;    // Also returns true if I change to 'return false;'
}


int main()
{
    sf::RenderWindow window(sf::VideoMode(640, 480), "Game Of Life");

    bool cells[16][16];
    int i, j = 0;

    for(i = 0; i < 16; i++)
    {
        for(j = 0; j < 16; j++)
        {
            cells[i][j] = false;
            std::cout << i << ", " << j << ": " << cells[i][j] << std::endl;
        }
    }

    for(i = 0; i < 16; i ++)
    {
        for(j = 0; j < 16; j++)
        {
            cells[i][j] = getCellStates[cells, i, j];
            std::cout << i << ", " << j << ": " << cells[i][j] << std::endl;
        }
    }


    while(window.isOpen())
    {
        sf::Event event;
        while(window.pollEvent(event))
        {
            if(event.type == sf::Event::Closed)
                window.close();
        }
    }

    return 0;
}
  • 2
    эта строка даже компилируется? cells[i][j] = getCellStates[cells, i, j];
  • 1
    Если бы вы сначала попытались использовать отладчик, вам бы не нужно было публиковать этот вопрос (поскольку вы увидите, что ваша функция никогда не вызывается ... хотя вам, возможно, пришлось отправить другой вопрос, чтобы спросить, почему это так) , Пожалуйста, не используйте stackoverflow в качестве первой линии защиты.
Показать ещё 1 комментарий
Теги:

1 ответ

8
Лучший ответ

Проблема заключается не в функции, а на сайте вызова (поскольку это сайт вызова). Используйте круглые скобки для вызова функции, а не скобки.

cells[i][j] = getCellStates(cells, i, j);

Вы преобразовываете указатель функции в логическое, что действительно всегда true. Подсчет указателей функций является нестандартным расширением, поэтому включите предупреждения компилятора и педантизм, чтобы предотвратить подобные ошибки. Для GCC и clang я рекомендую следующие флаги:

-Wall -Wextra -Werror -pedantic
  • 3
    Еще одна жертва какого-то дикого нестандартного расширения GCC. По-видимому, GCC допускает арифметику указателей на указатели функций ... Смешно.
  • 0
    Спасибо за ваш ответ. И хотя я не знаю, что означает ваш комментарий AndreyT, я использую GCC, так что ... я виню компилятор;)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню