参数'1'

时间:2017-03-09 21:25:20

标签: c++ multidimensional-array sudoku

我正在尝试编写一个验证已完成的电路板的数独程序。到目前为止,这是我的代码:

#include <iostream>
#include <string>
#include <fstream>
#include <sstream>
#include <pthread.h>

using namespace std;

int *board[9];
int row, col;
void is_row_ok(int* board[9][9]);
void is_col_ok(int* board[9][9]);
void is_square_ok(int* board[9][9]);

int main()
{
    for (int i = 0; i < 9; ++i)
    {
        board[i] = new int[9];
    }

    string line;
    ifstream myFile("Testfile1.txt");

    for (int row = 0; row < 9; ++row)
    {
        string line;
        getline(myFile, line);

        stringstream iss(line);
        cout << endl;

        for (int col = 0; col < 9; ++col)
        {
            string val;
            getline(iss, val, ',');
            if (!iss.good())
                break;

            stringstream convertor(val);
            convertor >> board[row][col];
            cout << board[row][col] << "  ";
        }
    }
    is_row_ok(&board[9][9]); //<-- error happens here
    pthread_create(thread1, NULL, is_row_ok, board[9][9]);
    //pthread_create(thread1, NULL, is_col_ok, board[9][9]);
    //pthread_create(thread1, NULL, is_square_ok, board[9][9]);

    cout << endl;
    return 0;
    }

void is_row_ok(int board[9][9])
{
    int element_count = 0;
    char element_value;
    for (int i = 0; i < 9; ++i)
    {
        for (int j = 0; j < 9; ++j)
        {
            element_count = 0;
            element_value = board[i][j];
            if (element_value != ' ')
            {
                for (int k = 0; k < 9; ++k)
                {
                    if (board[i][k] == element_value)
                        element_count++;
                }
            }
            if (element_count >= 2)
            {
                cout << "Row " << i << " is invalid." << endl;
            }
            else
            {
                cout << "Row " << i << " is valid." << endl;
            }
        }
    }
    //pthread_exit(NULL);
}

我收到以下错误:

attempt.cpp:45:24: error: cannot convert ‘int*’ to ‘int* (*)[9]’ for argument ‘1’ to ‘void is_row_ok(int* (*)[9])’
  is_row_ok(&board[9][9]);

我不确定发生了什么。我在这里和其他网站上看了很多类似的情况,我试图实现他们的解决方案,但没有一个有效。如果有人能帮我弄清楚我需要改变什么,我将不胜感激。

P.S。函数is_col_ok()和is_square_ok()与is_row_ok()函数非常相似,这就是它们不包含在内的原因。

P.P.S。如果你也可以看看我的pthread创建功能,告诉我是否已经正确完成,如果不是我需要更改

P.P.S。如果您需要任何其他代码,请不要犹豫,

1 个答案:

答案 0 :(得分:1)

你混合了一个2D数组的整数,即int board[9][9]作为boardis_row_ok - 参数的类型,其中一维数组的指针指向1D数组的int ,即int *board[9]作为董事会的类型。

可以将board定义为指向int[9]的一维指针数组并将其初始化为:

int *board[9];
int main() {
    for (int i = 0; i < 9; ++i)  {
        board[i] = new int[9];
    }
    ...

但是你必须声明+定义你的is_row_ok - 函数为

void is_row_ok(int* board[9]);
...
void is_row_ok(int* board[9]) { ...

并用

调用它
is_row_ok(board);

请注意,在原始代码声明中void is_row_ok(int* board[9][9]);void is_row_ok(int board[9][9]) { ...的定义不匹配,因此您有两个(重载)函数is_row_ok,一个在{{1}之前声明的函数但是从未定义,另一个具有在main之后定义的不同参数类型。