如何在类中更改数组

How to change array in class?

本文关键字:数组      更新时间:2023-10-16

如何赋值字符数组'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];

复位板每次循环开始?

谢谢

如果你的问题是你不能分配数组,有几个解决方案。

你可以使用自定义函数来重置你的数组:

#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::数组代替:

#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在编译时并不知道数组的大小。

编辑:如果你关心数组的作用域,π α ντα ρ ε ε给出了一个解决方案。
就个人而言,我将其声明为static constexpr在游戏类(这有点像定义一个全局),虽然我不知道你的类是如何交互的。

嗯,你可以有一个全局数组用来初始化你的板,并将在几个Player实例之间共享。

只要在main()作用域之外提供startData作为全局静态,并让Player接收该实例的引用。


但是,我不认为上面提到的是一个好的解决方案。

你应该有一个class Board包含和一致地管理一个内部成员startData(或者更好的boardData),并在Player实例之间共享对它的引用。