【发布时间】:2021-08-06 12:23:30
【问题描述】:
我尝试通过使用私有成员来自定义类中的某些类型,这些成员用于设置自定义容器的大小。但我收到了:
error: ‘CoverMatrix’ does not name a type
error: ‘Board’ does not name a type
如何正确操作它?
#include <vector>
#include <array>
#include <string>
#include <iostream>
class SudokuBoard
{
private:
Board _board_data;
int _BOX_SIZE;
int _BOARD_SIZE;
const int _MAX_VALUE = _BOARD_SIZE;
const int _NUM_CONSTRAINTS = 4;
public:
template <class T, int ROW, int COL>
using Matrix = std::array<std::array<T, COL>, ROW>;
typedef CoverMatrix Matrix<int, _BOARD_SIZE * _BOARD_SIZE * _MAX_VALUE, _BOARD_SIZE * _BOARD_SIZE * _NUM_CONSTRAINTS>;
typedef Board Matrix<int, _BOARD_SIZE, _BOARD_SIZE>;
SudokuBoard(const std::string& filename);
void set_board_data(int row, int col, int num) { _board_data[row][col] = num; }
int get_board_data(int row, int col) const { return _board_data[row][col]; }
Board get_board_data() const { return _board_data; }
int at(int row, int col) const { return _board_data[row][col]; }
// Prints the Sudoku board
friend void print_board(const SudokuBoard& board);
friend std::ostream& operator<< (std::ostream &out, const SudokuBoard& board);
int indexInCoverMatrix(int row, int col, int num);
int createBoxConstraints(CoverMatrix coverMatrix, int header);
int createColumnConstraints(CoverMatrix coverMatrix, int header);
int createRowConstraints(CoverMatrix coverMatrix, int header);
int createCellConstraints(CoverMatrix coverMatrix, int header);
void createCoverMatrix(CoverMatrix coverMatrix);
void convertToCoverMatrix(Board board, CoverMatrix coverMatrix);
};
【问题讨论】:
-
请注意,
int _BOX_SIZE;、int _BOARD_SIZE;、const int _MAX_VALUE = _BOARD_SIZE;、const int _NUM_CONSTRAINTS = 4;都不能用于模板参数,因为它们不是编译时常量。 -
请检查正确的
typedefsyntax。 -
您没有说明您正在使用的 C++ 版本,但您可能对
using关键字感兴趣。 en.cppreference.com/w/cpp/language/type_alias -
您已经将
using用于Matrix,为什么不将其扩展为CoverMatrix/Board?