编译我的第一个c ++程序时遇到问题

时间:2015-03-30 15:51:52

标签: c++

这是我的代码:

#include<iostream>

private int chessBoard[8][8];

void printBoard(int board[][])
{
    for(int i=0; i<8; i++)
    {
        for(int j=0; j<8; j++)
        {
            if(board[i][j])
            {
                cout<<"Q ";
            }

            else
            {
                cout<<"* ";
            }
        }
    cout<<endl;
    }
}

//This method will check if any queens are in attacking position to the left of the test queen placement
bool checkSpot(int board[][],int row, int col)
{
    bool safe = true;
    //checks the current row for queens
    for(int i=0; i<col, i++)
    {   
        if(board[row][i])
        safe=false;
    {

    //checks the upper diag
    for( int i=row, int j=col; i>0 && j>0; i--, j--)
    {
        if(board[i][j])
        safe=false;
    }

    //checks lower diag
    for(int i = row, int j=col; i<8 && j>0; i--, j++)
    {
        if(board[i][j])
        safe=false;
    }

    if(safe)
    {
        return true;
    }
    else
        return false;
}

bool solve(int board[][], int testCol)
{
    bool solved = false;
    bool safe;
    if(testCol==8)
    {
        solved = true;
        return solved;
    }

    for(int i =0; i>8; i++)
    {
        // test if the tested column(testCol) and the row(i) are both safe for the queen to be placed at then we can move into placing said queen and more onto the next column for
        // more solutions in this same method recursivly
        safe = checkSpot(board, i, testCol);
        if(safe)
        {
            //place the queen
            board[i][col]=1;
            //recursion to go back through this method in the next column
            if(solve(board[][], testCol+1)
            {
                solved = true;
                printBoard(board)
                return solved;

            }

            else
            {
                //if the queen cannot be placed, we have to remove the previous queens and move them until a solution is found.
                board[i][testCol]=0;

        }
    }

}       

int main()
{


    solve(chessBoard, 0);
}

我继续得到的错误如下:

8queens.cpp:3:17: error: variable or field ‘printBoard’ declared void
 void printBoard(board[][])
                 ^
8queens.cpp:3:17: error: ‘board’ was not declared in this scope
8queens.cpp:3:23: error: expected primary-expression before ‘]’ token
 void printBoard(board[][])
                       ^
8queens.cpp:3:25: error: expected primary-expression before ‘]’ token
 void printBoard(board[][])

这个逻辑非常简单(至少我希望它运行良好)但我甚至无法通过编译器。我可以就这个问题得到一些指导吗?

你们都是一个巨大的帮助,但遗憾的是我发现我只能使用1d数组来解决这个问题所以我必须从头开始。再次感谢大家的帮助,您的建议一定会帮助我。

2 个答案:

答案 0 :(得分:2)

嗯,你的代码中有很多错误。让我们看看它们。

首先,从

中删除private
private int chessBoard[8][8];

您只需要对类成员使用private。所以把它改成

int chessBoard[8][8];

接下来,在您的所有功能中,您都有类似

的功能
void printBoard(int board[][])
                            ^
                            here, it's wrong

你需要提供尺码,你只能跳过第一尺码,所有其余部分必须提供以便更好地将其改为

void printBoard(int board[][8])
                          ^
                          it's okay to leave this one

对所有功能进行更改。

您的代码的某些地方也遗漏了一些}

差点忘了,你需要添加一个

using namespace std;

在标题之后,或使用

std::cin
std::cout

std::endl

而不是cincoutendl

你也有

for(int i=0; i<col, i++)
                  ^
                  you need a semicolon here

for( int i=row, int j=col; i>0 && j>0; i--, j--)
                 ^
                no need for another int here

将其更改为

for( int i=row, j=col; i>0 && j>0; i--, j--)

答案 1 :(得分:0)

这个编译。至于我做了什么,有很多,并且需要一段时间来写下每件事。需要注意的一件重要事情是for loops。 你有:

for( int i=row, int j=col; i>0 && j>0; i--, j--)
{
    if(board[i][j])
      safe=false;
}

如果要执行嵌套for loop,请执行以下操作:

for (int i = row;  i > 0; i--)
{
     for (int j = col; j > 0; j--)
     {
          if (board[i][j])
             safe = false;
     }
}

另外,请注意括号{} (),因为它们不一致且有些丢失。

对于数组,在使用2d数组时必须至少指定一个维度。

你在不同的地方有int board[][]。您必须:int board[][8]代替。

另外,如果你想使用coutendlcin等等,你必须拥有include namespace std;,否则你将不得不使用{{1} },std::coutstd::endl。 但无论如何,现在应该编译。

std::cin