Hi guys,

I'm coding a Sudoku Solver but it isn't finished yet. However, I've tried to run it just to see, if it works for an empty Sudoku.

Code:
#include <iostream>

typedef unsigned short ushort;

using std::cout;
using std::cin;     // will be needed later for input
using std::endl;

const ushort maxCol=9, maxRow=9;

class Sudoku
{
private:
    ushort gameField[maxRow][maxCol];
public:
    Sudoku();   //ctor
    void Print();
    void SetNumber(ushort row, ushort col, ushort number);
    void Solve();
    bool CheckRow(ushort row, ushort number);
    bool CheckCol(ushort col, ushort number);
    bool CheckSquare(ushort row, ushort col, ushort number);
};

Sudoku::Sudoku()
{
    for (ushort actRow=0; actRow < maxRow; actRow++)
    {
        for (ushort actCol=0; actCol < maxCol; actCol++)
        {
            SetNumber(actRow, actCol, 0);
        }
    }
}

void Sudoku::Print()
{
    for (ushort actRow=0; actRow < maxRow; actRow++)
    {
        for (ushort actCol=0; actCol < maxCol; actCol++)
        {
            cout << gameField[actRow][actCol] << " ";
            if (actCol==2 || actCol==5)
            {
                cout << "| ";
            }
        }
        cout << endl;
        if (actRow == 2 || actRow == 5)
        {
            cout << "------ ------- ------ " << endl;
        }
    }
    cout << endl;
}

bool Sudoku::CheckCol(ushort col, ushort number)
{
    bool check = false;

    for (ushort actRow=0; actRow < maxRow; actRow++)
    {
        if (gameField[actRow][col] == number)   //Checks if you find your number only one time in the column
        {
            check = !check; //finds it one time then check is true
        }
    }

    return check;
}

bool Sudoku::CheckRow(ushort row, ushort number)
{
    bool check = false;

    for (ushort actCol=0; actCol < maxCol; actCol++)
    {
        if (gameField[row][actCol] == number)   //Checks if you find your number only one time in the row
        {
            check = !check; //finds it one time then check is true
        }
    }

    return check;
}

bool Sudoku::CheckSquare(ushort row, ushort col, ushort number)
{
    bool check = false;

    ushort sqMinCol = col - ( col%3 );    // The smallest column in the actual square
    ushort sqMinRow = row - ( row%3 );
    ushort sqMaxCol = sqMinCol + 2;     //The highest column in the actual square
    ushort sqMaxRow = sqMinRow + 2;

    for (ushort actCol=sqMinCol; actCol <= sqMaxCol; actCol++)
    {
        for (ushort actRow=sqMinRow; actRow <= sqMaxRow; actRow++)
        {
            if (gameField[actRow][actCol] == number)
            {
                check = !check;
            }
        }
    }

    return check;
}

void Sudoku::SetNumber(ushort row, ushort col, ushort number)
{
    gameField[row][col] = number;
}

void Sudoku::Solve() //Tries different numbers in different rows and columns
{
    for (ushort actRow=0; actRow < maxRow; actRow++)
    {
        for (ushort actCol=0; actCol < maxCol; actCol++)
        {
            for (ushort number=1; number <=9; number++)
            {
                if ( (CheckRow(actRow, number)==true) && (CheckCol(actCol, number)==true) && (CheckSquare(actRow, actCol, number)==true))
                {
                    SetNumber(actRow, actCol, number);
                    break;
                }
            }
        }
    }
}

int main()
{
    Sudoku game;
    game.Print();
    game.Solve();
    game.Print();

    return 0;
}
I don't know, why it doesn't work. CheckRow, CheckCol and CheckSquare work great.
I would appreciate any hints.