1

我的 C++ 函数总是返回 true。总是。即使我将返回值更改为“false”,它仍然返回 true。我会笑,但我已经过了那个阶段,对我来说根本没有意义。

(如果有人感兴趣,代码是康威的生命游戏

#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;
}
4

1 回答 1

9

问题不在于函数,而在于调用站点(只要它是调用站点)。使用括号来调用函数,而不是方括号。

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

您正在将函数指针转换为布尔值,它确实总是true. 函数指针的下标是非标准扩展,因此启用编译器警告和迂腐以防止此类错误。对于 GCC 和 clang,我推荐以下标志:

-Wall -Wextra -Werror -pedantic
于 2013-11-08T19:27:11.340 回答