将2D数组设置为2D数组时出错

时间:2013-01-09 02:05:09

标签: c++

我有这个构造函数:

Transform::Transform( float matrix[4][4] )
{
    m = matrix;
}

这个类定义:

class Transform
{
    float m[4][4];
public:
    Transform();
    Transform(float matrix[4][4]);

但这不会编译。

可能出现什么问题?

错误1错误C2440:'=':无法从'float [] [4]'转换为'float [4] [4]'c:\ Users \ Josh \ Documents \ agui \ trunk \ src \ Agui \ Transform.cpp 75

由于

3 个答案:

答案 0 :(得分:4)

如果您使用的是c ++ 11,请尝试将float matrix[4][4]更改为std::array<std::array<float,4>,4>

它是满口的,但它支持c阵列本身不支持的操作。

你可以做这样的事情来清理语法。

typedef std::array<std::array<float,4>,4> Matrix;

现在你可以做到

Matrix myMatrix;

p.s如果您不使用C ++ 11,则可以使用vector而不是array。它与数组略有不同,但也添加了更多功能,并且在设置之后访问权限相同。

答案 1 :(得分:3)

Karthik的答案非常好,或者你也可以......

  for(int i = 0; i < 4; i++)
  {
     for(int j = 0; j < 4; j++)
      {
         m[i][j] = matrix[i][j];
      }
  }

原则与WhozCraig在评论中提到的相同。

答案 2 :(得分:1)

即使您将构造函数的参数声明为float matrix[4][4],编译器也会忽略第一个4