【问题标题】:const_cast of a static member vector of objects对象的静态成员向量的 const_cast
【发布时间】:2020-07-16 17:27:07
【问题描述】:

我开始用 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);
        }
    }   
}

【问题讨论】:

    标签: c++ static constants


    【解决方案1】:

    用你想要的值初始化它:

    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;
    }
    

    【讨论】:

    • 感谢您的帮助!它不允许我把它保持不变。如果我添加 const 限定符并按照您的建议对其进行初始化,它会给我 >" cannot have an in-class initializer>
    • 你必须像以前一样在课堂外初始化它。
    猜你喜欢
    • 2011-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-29
    • 1970-01-01
    • 2020-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多