我在stackoverflow和google上搜索了很多,但没有像我的情况那样。我想声明我的类框的二维数组。它工作正常,然后我需要一个打印功能。如果我在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中,它可以正常工作:(。我必须使用新的或什么?或者如何将盒子阵列传递给函数?谢谢。
答案 0 :(得分:1)
首先,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;
}
答案 1 :(得分:1)
您的解决方案是忘记原始数组。相反,您使用std::vector
或std::array
并使用operator()
编写Matrix类,如C++ FAQ中所述。另请参阅常见问题解答中的下一项,了解您希望将(x, y)
表单改为[x][y]
的原因,但请考虑是优秀程序员,他们更喜欢后一种语法(使用代理类),因此案例可能不像FAQ所说的那样清晰。
在任何情况下,您都需要一个具有std::vector
或std::array
实现的Matrix类。原始数组是执行此任务的错误工具。