unsigned char j[4][4];
我希望将此元素传递给类的构造函数,我在类中有一个与矩阵类型相同的属性
class x{
private:
unsigned char x[4][4];
public:
x(unsigned char j[4][4]);
};
我把值放在我的矩阵j中,在构造函数中我想要像这样将j和x均衡
x(unsigned char j[4][4]){
x = j;
}
但代码中出现错误
将'unsigned char(*)[4]'赋值给'unsigned char [4] [4]'
的不兼容类型为什么?
答案 0 :(得分:3)
你不能像这样的参数传递数组。您不应该使用数组开头。真的,只是不要。您遇到的问题只是使用数组时遇到的众多问题中的一个问题。
相反,请使用包含另一个std::array
的{{3}}(以便它是二维的):
#include <array>
class X {
private:
std::array<std::array<unsigned char, 4>, 4> x;
public:
X(std::array<std::array<unsigned char, 4>, 4> j);
};
在构造函数中,只需指定:
X(std::array<std::array<unsigned char, 4>, 4> j)
{
x = j;
}
或者更好的是,使用std::array
:
X(std::array<std::array<unsigned char, 4>, 4> j)
: x(j)
{ }
(另请注意,我将您的班级名称从x
更改为X
(大写。)不要对类和变量使用冲突的名称。这令人困惑: - )
如果您需要矩阵的大小在运行时确定而不是固定大小,请使用constructor initialization list代替std::array
。
答案 1 :(得分:1)
你不能只为彼此分配数组:它们不是vector
,你可以安全地分配。
您必须迭代作为参数传递的数组并复制其内容:
for(size_t i = 0; i < 4; ++i)
for(size_t j = 0; j < 4; ++j)
this->x[i][j] = argument_called_j[i][j];
顺便说一句,在我看来,这个x
变量有点令人困惑,因为有一个名为x
的类。如果你想看看如何构建这样一个类来处理矩阵,请查看GitHub上的my project called Matrix。