将矩阵传递给函数

时间:2016-03-28 19:15:34

标签: c++ matrix constructor

  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]'

的不兼容类型

为什么?

2 个答案:

答案 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