我試圖編寫一個數獨程序來驗證已完成的棋盤。這是我到目前爲止的代碼:無法將'int *'轉換爲'int *(*)[9]'作爲參數'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]);
我不知道發生了什麼事。我在這裏和其他網站上看到了一堆類似的情況,我試圖實現他們的解決方案,但都沒有工作。如果任何人可以請幫助我找出我需要改變,這將不勝感激。
P.S.函數is_col_ok()和is_square_ok()與is_row_ok()函數非常相似,因此它們不包含在內。
P.P.S.如果你也可以看看我的pthread創建函數,並告訴我我是否已經正確地完成了它,如果不是,我需要更改
P.P.S.如果您需要任何額外的代碼,請不要猶豫,要求它
發生此錯誤的原因是:board [9] [9]'解析爲int類型的值。所以你把這個地址取出來,然後用一個指向'int'的指針,也就是'int *'。這與您嘗試調用的函數期望的參數的值類型不匹配,因此編譯器錯誤。 – user268396
'is_row_ok(&board [9] [9]);' - 你想說什麼? – AnT
http://stackoverflow.com/questions/8767166/passing-a-2d-array-to-a-c-function – stark