无法将参数“1”的 'int*' 转换为 'int* (*)[9]'
Cannot convert 'int*' to 'int* (*)[9]' for argument '1'
我正在尝试编写一个数独程序来验证已完成的棋盘。到目前为止,这是我的代码:
#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]);
我不确定发生了什么。我在这里和其他网站上看到了很多类似的情况,我尝试实施他们的解决方案,但 none 奏效了。如果有人能帮我弄清楚我需要更改什么,将不胜感激。
P.S。函数 is_col_ok() 和 is_square_ok() 与 is_row_ok() 函数非常相似,这就是为什么不包括它们的原因。
P.P.S。如果你也可以看看我的 pthread 创建函数并告诉我我是否正确地完成了它,如果没有,我需要改变什么
P.P.S。如果您需要任何其他代码,请随时提出要求
你混合了一个二维整数数组,即 int board[9][9]
作为 is_row_ok
中你的 board
参数的类型与一个指向一维数组指针的一维数组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
,一个在 main
但从未定义,另一个具有在 main
.
之后定义的不同参数类型
我正在尝试编写一个数独程序来验证已完成的棋盘。到目前为止,这是我的代码:
#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]);
我不确定发生了什么。我在这里和其他网站上看到了很多类似的情况,我尝试实施他们的解决方案,但 none 奏效了。如果有人能帮我弄清楚我需要更改什么,将不胜感激。
P.S。函数 is_col_ok() 和 is_square_ok() 与 is_row_ok() 函数非常相似,这就是为什么不包括它们的原因。
P.P.S。如果你也可以看看我的 pthread 创建函数并告诉我我是否正确地完成了它,如果没有,我需要改变什么
P.P.S。如果您需要任何其他代码,请随时提出要求
你混合了一个二维整数数组,即 int board[9][9]
作为 is_row_ok
中你的 board
参数的类型与一个指向一维数组指针的一维数组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
,一个在 main
但从未定义,另一个具有在 main
.