1

私の C++ 関数は常に true を返します。いつも。戻り値を「false」に変更しても、true が返されます。私は笑いますが、それを過ぎて、まったく意味をなさない段階になりました。

(誰かが興味を持っている場合に備えて、コードはConway's 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;
}
4

1 に答える 1

9

問題は関数内ではなく、呼び出しサイトにあります (呼び出しサイトである限り)。かっこではなく、かっこを使用して関数を呼び出します。

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

関数ポインターをブール値に変換していますが、これは実際には常にtrueです。関数ポインターの添字は非標準の拡張であるため、コンパイラーの警告とペダントリーを有効にして、この種のエラーを防止します。GCC と clang には、次のフラグをお勧めします。

-Wall -Wextra -Werror -pedantic
于 2013-11-08T19:27:11.340 に答える