Моя функция 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;
}
Проблема заключается не в функции, а на сайте вызова (поскольку это сайт вызова). Используйте круглые скобки для вызова функции, а не скобки.
cells[i][j] = getCellStates(cells, i, j);
Вы преобразовываете указатель функции в логическое, что действительно всегда true
. Подсчет указателей функций является нестандартным расширением, поэтому включите предупреждения компилятора и педантизм, чтобы предотвратить подобные ошибки. Для GCC и clang я рекомендую следующие флаги:
-Wall -Wextra -Werror -pedantic
cells[i][j] = getCellStates[cells, i, j];