C++ 在类中使用数组
在类中使用数组时遇到问题 我的.h文件:C++ 在类中使用数组,c++,C++,在类中使用数组时遇到问题 我的.h文件: #ifndef SUDOKU_H #define SUDOKU_H class sudoku { public: sudoku(); bool findUnassignedLocation(int, int, int); bool isSafe(int, int, int); bool usedInRow(int, int, int); bool usedInCol(int, int, int); boo
#ifndef SUDOKU_H
#define SUDOKU_H
class sudoku {
public:
sudoku();
bool findUnassignedLocation(int, int, int);
bool isSafe(int, int, int);
bool usedInRow(int, int, int);
bool usedInCol(int, int, int);
bool usedInBox(int, int, int, int);
void printGrid(int);
void solveSudoku(int);
private:
static const int N;
static const int UNASSIGNED;
};
#endif /* SUDOKU_H */
My.cpp文件:
#include "sudoku.h"
sudoku::sudoku() {
N = 9;
UNASSIGNED = 0;
}
bool sudoku::findUnassignedLocation(int grid[N][N], int &row, int &col){
for (row = 0; row < N; row++)
for (col = 0; col < N; col++)
if (grid[row][col] == UNASSIGNED)
return true;
return false;
}
bool sudoku::usedInRow(int grid[N][N], int row, int num){
for (int col = 0; col < N; col++)
if (grid[row][col] == num)
return true;
return false;
}
bool sudoku::usedInCol(int grid[N][N], int col, int num){
for (int row = 0; row < N; row++)
if (grid[row][col] == num)
return true;
return false;
}
bool sudoku::usedInBox(int grid[N][N], int boxStartRow, int boxStartCol, int num){
for (int row = 0; row < 3; row++)
for (int col = 0; col < 3; col++)
if (grid[row+boxStartRow][col+boxStartCol] == num)
return true;
return false;
}
bool sudoku::isSafe(int grid[N][N], int row, int col, int num){
return !usedInBox(grid, row - row % 3 , col - col % 3, num) &&
!usedInCol(grid, col, num) && !usedInRow(grid, row, num);
}
void sudoku::solveSudoku(int grid[N][N]){
int row, col;
if(!findUnassignedLocation(grid, row, col)){
printGrid(grid);
}
for (int num = 1; num <= 9; num++){
if(isSafe(grid, row, col, num)){
grid[row][col] = num;
if(solveSudoku(grid))
printGrid(grid);
grid[row][col] = UNASSIGNED;
}
}
std::cout << "No Solution" << std::endl;
}
void sudoku::printGrid(int grid[N][N]){
for (int row = 0; row < N; row++){
for (int col = 0; col < N; col++)
std::cout<<grid[row][col]<<" ";
std::cout<<std::endl;
}
}
我相信问题是用指针,但是我从C++开始,所以我找不到解决办法。
谢谢成员函数声明为like
void solveSudoku(int);
也就是说,它有一个类型为int
的参数
你把这个函数叫做
S.solveSudoku(grid);
将二维数组传递给它
int grid[9][9]
编译器无法将指向类型为int(*)[9]
的数组的第一个元素的指针转换为类型为int
的对象
似乎有一个输入错误,因为在成员函数声明之后,您像这样定义了它
void sudoku::solveSudoku(int grid[N][N]){
//...
因此,更新类定义中的函数声明
还有这个构造函数
sudoku::sudoku() {
N = 9;
UNASSIGNED = 0;
}
无效,因为N和UNASSIGNED被声明为常量静态成员
static const int N;
static const int UNASSIGNED;
是的,我知道了。但是我不知道如何正确声明我的成员函数你的函数定义与声明不同。数组不是指针。最好在类定义中命名参数,以帮助人们理解你的代码。是的,我知道了。但我不知道申报会员的正确方式function@user2792523在类定义中声明它的方式与在自己的定义中声明它的方式相同我自己的定义是int grid[N][N]。我不能在我的类定义中声明它。对吗?@user2792523代替数独(int);在类定义中使用void sudoku::solveSudoku(int grid[N][N])@user2792523在我之前的文章中,有一个明确的函数应该如何定义。
sudoku::sudoku() {
N = 9;
UNASSIGNED = 0;
}
static const int N;
static const int UNASSIGNED;