C++ 如何在类的.cpp文件中定义静态数组
我知道有很多关于静态函数和变量的问题,但我找不到一个能解释我是如何做这些事情的: 董事会C++ 如何在类的.cpp文件中定义静态数组,c++,arrays,pointers,static,C++,Arrays,Pointers,Static,我知道有很多关于静态函数和变量的问题,但我找不到一个能解释我是如何做这些事情的: 董事会 class board:public QGraphicsPixmapItem { public: board(); static basedice *gamepos[8][8]; }; 我想这样定义我的数组: board.cpp board::board() { for (int i=0;i<8;i++) { for (int j=0;j<8
class board:public QGraphicsPixmapItem
{
public:
board();
static basedice *gamepos[8][8];
};
我想这样定义我的数组:
board.cpp
board::board()
{
for (int i=0;i<8;i++)
{
for (int j=0;j<8;j++)
{
gamepos[i][j]=NULL;
}
}
}
board::board()
{
对于(int i=0;i静态变量会自动初始化为零/false/null,因此不需要初始化数组
无论如何,您不应该从实例构造函数中重新初始化静态变量,因为这样会产生有趣的结果。如果您确实希望gamepos数组是静态的,您可以在类板中声明一个静态方法来初始化数组
然后从类外部调用此方法
int main() {
Board * myboard = new Board();
Board::initGamepos();
}
然而,看看你的代码和你想做什么(即每次你创建一个新的板实例时重新初始化gamepos阵列),很明显你不希望gamepos是静态的。
单板1 gamepos数组:这不是静态成员的标记,而是标准成员的标记。我想你应该看看这个:你似乎不太了解类的静态成员是如何工作的,我以前看到过,但我看不出我如何在cpp文件中定义它。如果你想到国际象棋,那么每个板都有自己的位置来容纳Chess pieces->在每个棋盘上下一盘棋,让每个棋盘拥有存储位置的位置可能更有意义(即,没有静态gamepos,而是让它成为类棋盘的一员)为什么我不应该使用static,我认为它更容易使用。使用static有什么问题吗?因为在您的特定情况下,1 board=>1 gamepos数组。如果将gamepos设置为static,那么board类的所有实例都共享同一个gamepos数组。重新初始化不是矛盾修饰法吗?好的,但是我如何初始化它?您不需要初始化它,它可以在您的情况下,默认情况下初始化为NULL。如果您想将静态成员初始化为另一个值,可以使用静态方法来执行此操作。我有一个问题:basedice声明在哪里,在本例中定义在哪里。对我来说,basedice似乎没有定义@user3670482。这是我的一个类,所有片段都继承了from itOh.对不起,我使用了一个错误的示例..我不想每次都初始化它..我不应该把它放在构造函数中,我不知道为什么我以前没有尝试过..研究“c++单体”。也许你想让这个板成为单体。