c++ - 对象的静态成员向量的 const_cast
问题描述
我开始用 C++ 编写 Djambi 棋盘游戏。我为棋盘的正方形创建了一个类,并创建了一个指向方形对象的静态指针向量,以拥有我的游戏的实际棋盘。每个正方形都以其行和列为特征,因此定义我的板意味着将具有正确坐标的正方形与向量的每个分量相关联。关键是,一旦我定义了我的向量,我希望它保持不变,因为我希望向量的每个元素都指向同一个正方形,但是我怎样才能让它保持不变,然后用 for 循环定义它呢?由于它是一个静态成员,我什至无法在类范围内定义它。一些帮助将不胜感激。
//square.h
#include<vector>
class square
{
protected:
size_t row{ 0 };
size_t column{ 0 };
bool occupancy{ false };
public:
square() { };
square(size_t r, size_t c): row{r}, column{c} { }
square(size_t r, size_t c, bool occ) : row{ r }, column{ c }, occupancy{ occ } { }
~square() { };
bool & get_status() { return occupancy; };
size_t& get_row() { return row; };
size_t& get_column() { return column; };
static const size_t rank{ 9 };
static std::vector<square*> board;
static size_t indice(size_t r, size_t c);
static void define_board();
};
//square.cpp
#include"square.h"
#include<string>
size_t square::indice(size_t r, size_t c) {
size_t indice = rank * (r - 1) + c;
return indice;
};
std::vector<square*> square::board = std::vector<square*>(81);
void square::define_board() {
for (size_t r = 1; r <= square::rank; r++) {
for (size_t c = 1; c < 9; c++) {
*(board[indice(r, c)]) = square(r, c);
}
}
}
解决方案
Initialize it with the value you want it to have:
const std::vector<square> square::board = define_board();
std::vector<square> square::define_board() {
std::vector<square> board(81);
for (size_t r = 1; r <= square::rank; r++) {
for (size_t c = 1; c < 9; c++) {
board[indice(r, c)] = square(r, c);
}
}
return board;
}
推荐阅读
- angular - 在模态对话框中显示 mat-select
- java - build().perform() 和 perform() 有什么区别
- c# - 在 C# 中使用 WebClient 设置浏览器分辨率
- java - 用于 Java 的 SQLite 未正确更新行
- c# - 如何不断获取触摸位置?
- matlab - 在 MATLAB 中从 .mat 文件访问稀疏矩阵
- typeorm - 连接 TypeORM 的实体声明
- python - 如何将 Systemd 用于 Django-q 守护进程
- php - 如何在 PHP 中增加 PHP-AI 中的功能数量?
- r - CRAN 检查:'\R' 是从 "'D:\temp\R" 开始的字符串中无法识别的转义