2014-09-05 22 views
0

我知道有关于静态函数和变量,但我无法找到一个很多问题会谈解释我怎么做这样的事情:如何定义在我的课的.cpp文件静态数组

板.H

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

} 

而且我还有一个问题,那就是在许多类中使用某个数组的正确方法,比如全局数组......例如在国际象棋游戏中,用于保存我的作品的位置? 对不起,我的英语不好。

+1

我想你应该看看这个:http://www.learncpp.com/cpp-tutorial/ 811-static-member-variables /看起来你不太清楚类的静态成员是如何工作的 – CollioTV 2014-09-05 15:10:32

+0

我以前看过但我看不到如何在cpp文件中定义它 – behrooz 2014-09-05 15:16:48

+1

如果你想到国际象棋,那么每一个博ard有自己的地方来放置棋子 - >每个棋盘玩一局国际象棋游戏并让每个棋盘都拥有存储位置的地方也许更有意义。没有静态gamepos,而是使其成为类板的成员) – BeyelerStudios 2014-09-05 15:16:56

回答

1

如果您确实希望gamepos数组是静态的,您可以在类Board中声明静态方法来初始化数组。

然后你从课堂外调用这个方法。

int main() { 

    Board * myboard = new Board(); 
    Board::initGamepos(); 

} 

但是看你的代码,你想要做的(这是重新初始化gamepos阵列每次你创建一个新的董事会的实例是什么,很显然,你不想gamepos是静态的。 1板< => 1 gamepos array:那不是静态成员的标记,那是标准成员的标记。

+0

Oh.Sorry我使用了一个错误的例子..我不想每次都初始化它..我不应该把它放在构造函数中,我不知道为什么我之前没有尝试它... – behrooz 2014-09-05 16:03:14

+2

Research “C++单例”。也许你想让单板成为单例。 – 2014-09-05 16:16:12

+0

@Thomas Matthews好的,我也会这么做。谢谢 – behrooz 2014-09-05 17:23:58

0

静态变量会自动初始化为零/ false/null,所以您不需要初始化数组。

无论如何,你不应该从你的实例构造函数重新初始化静态变量,会产生有趣的结果。

+1

是不是重新初始化为Oxymoron? – 2014-09-05 15:11:57

+0

好的,但我怎么能初始化它? – behrooz 2014-09-05 15:15:15

+0

你不需要初始化它,它在你的情况下默认情况下初始化为NULL。 如果要将静态成员初始化为另一个值,可以使用静态方法来完成此操作。 – 2014-09-05 15:27:30

相关问题