如何在课堂上更改数组?

时间:2015-07-29 19:13:03

标签: c++ arrays class

如何指定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];

每次循环开始时重置电路板?

谢谢

2 个答案:

答案 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>