gpt4 book ai didi

c++ - 通过引用调用类对象的二维数组

转载 作者:行者123 更新时间:2023-11-28 02:55:26 25 4
gpt4 key购买 nike

我在 stackoverflow 和谷歌上搜索了很多,但没有找到我的情况。我想声明我的类框的二维数组。它工作正常,然后我需要一个打印功能。如果我在 main() 中打印数组,那很好,但现在有了打印机功能,我似乎遇到了很多错误。请帮助我解决我的错误。

#include <iostream>

class box
{
private:
char life;
public:
box();
void display();
void input_alive();
void input_dead();
};

box::box()
{
life = '0';
}

void box::display()
{
std::cout << " " <<life <<" ";
}

void box::input_alive()
{
life = '1';
}

void box::input_dead()
{
life = '0';
}

void printer(box *array, int yy, int xx)
{
int i, j;
for(i=0; i<yy; i++) //PRINTER
{
for(j=0; j<xx; j++)
{
array[i][j].display();
if (j+1 == xx) //just newline for separate rows
std::cout << std::endl;
}
}
}
int main()
{
int row=5, col=5;
box arr[row][col];
arr[3][4].input_alive();
arr[1][1].input_alive();

printer(arr, row, col);
return 0;
}

这种通过引用传递数组的语法在普通的 int/char 数组中工作正常,但为什么不在这里。如果我将打印机函数放在 main 中,它工作正常:(。我必须使用 new 还是什么?或者我如何将 box 数组传递给函数?谢谢。

最佳答案

首先,C++ 不支持可变长度数组,因此您的代码不符合标准,因此不可移植。

其次,您可以使用 std::array 避免所有痛苦:

#include <array>

template <size_t ROWS, size_t COLS>
void printer(std::array<box, ROWS>, COLS>& arr)
{
for(int i=0; i<ROW; ++i)
{
for(int j=0; j<COL; ++j)
{
// do something with arr[i][j]
}
}

int main()
{
const int row=5;
const int col=5;
std::array<std::array<box, row>, col> arr;
arr[3][4].input_alive();
arr[1][1].input_alive();

printer(arr);
return 0;
}

关于c++ - 通过引用调用类对象的二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22126328/

25 4 0
文章推荐: javascript - 如何分别使用 jQuery 分隔字符串中的元素
文章推荐: javascript - 如何让图像在滚动时保持在div框内
文章推荐: javascript - 如何使用 angularJS 从 Controller 更改