如何指定char数组'startData'
int main()
{
Player plyr_1('X');
Player plyr_2('O');
char startData[8][8] = {{' ',' ',' ',' ',' ',' ',' ',' '},
{' ',' ',' ',' ',' ',' ',' ',' '},
{' ',' ',' ',' ',' ',' ',' ',' '},
{' ',' ',' ','O','X',' ',' ',' '},
{' ',' ',' ','X','O',' ',' ',' '},
{' ',' ',' ',' ',' ',' ',' ',' '},
{' ',' ',' ',' ',' ',' ',' ',' '},
{' ',' ',' ',' ',' ',' ',' ',' '}};
在此循环开始时
menu = false;
while(menu == false)
{
int turnCounter = 1;
Player currentPlyr('X');
currentPlyr = plyr_1;
plyr_1.data = startData;
plyr_2.data = startData;
plyr_1.score = 2;
plyr_2.score = 2;
selectMenu = currentPlyr.mainMenu();
在创建的类'plyr_1'和'plyr_2'
中的数组'data'中'data'是来自'Game'类的公共字符数组
class Game
{
public:
char data[8][8];
每次循环开始时重置电路板?
谢谢
答案 0 :(得分:2)
如果您的问题是无法分配数组,则有几种解决方案。
您可以使用自定义功能重置阵列:
#include <cstddef>
constexpr std::size_t arraySize = 8;
void resetMyArray(const int startingArray[][arraySize],
int toReset[][arraySize])
{
for( std::size_t i = 0 ; i < arraySize ; ++i )
for( std::size_t j = 0 ; j < arraySize ; ++j )
toReset[i][j] = startingArray[i][j];
}
int main(int argc, char* argv[])
{
int x[arraySize][arraySize];
int y[arraySize][arraySize];
resetMyArray(x, y);
return 0;
}
或者改为使用std :: array:
#include <array>
#include <cstddef>
int main(int argc, char* argv[])
{
constexpr std::size_t arraySize = 8;
std::array<std::array<int, arraySize>, arraySize> x;
std::array<std::array<int, arraySize>, arraySize> y;
x = y;
return 0;
}
编辑: 您也可以使用std :: vector,但这可能效率较低,因为std :: vector不知道您的数组在编译时的大小。
编辑:
如果你担心数组的范围,πάνταῥεῖ给出一个解决方案
就个人而言,我在Game类中声明它为static constexpr
(这有点像定义一个全局),虽然我不确切知道你的类如何交互。
答案 1 :(得分:0)
好吧,你可以有一个用于初始化你的电路板的全局数组,并将在几个Player
实例之间共享。
只需提供startData
作为全局静态main()
范围,并Player
接收该实例的引用。
尽管如此,我不认为上面提到的是一个很好的解决方案。
您应该让class Board
包含并始终如一地管理内部成员startData
(或更好boardData
),并在Player
个实例中共享对此的引用。< / p>