【问题标题】:How to change array in class?如何在课堂上更改数组?
【发布时间】:2015-07-29 19:13:03
【问题描述】:

如何分配 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”中的数组“数据”内

“数据”是“游戏”类的公共字符数组

class Game
{
    public:
        char data[8][8];

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

谢谢

【问题讨论】:

  • 如果您显示代码,请标记它是什么语言。它可以帮助其他人找到问题并影响语法突出显示。 C++?
  • 如果需要副本,为什么不使用手动复制数组的函数。如果您不需要副本而只是使用它来读取信息,为什么不使用指针?
  • This answer 可能会有所帮助

标签: c++ arrays class


【解决方案1】:

如果您的问题是无法分配数组,有几种解决方案。

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

#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(这有点像定义全局),尽管我不知道您的类是如何交互的。

【讨论】:

    【解决方案2】:

    好吧,您可以有一个用于初始化您的板的全局数组,并将在多个 Player 实例之间共享。

    只需提供startData 作为main() 范围之外的全局静态变量,并让Player 接收该实例的引用。


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

    您应该拥有一个包含并持续管理内部成员 startData(或更好的 boardData)的 class Board,并在 Player 实例之间共享对此的引用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 2015-04-13
      • 2019-07-03
      • 2020-11-25
      • 2019-03-26
      • 2012-01-12
      • 2015-02-23
      相关资源
      最近更新 更多