我有这个构造函数:
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
由于
答案 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
。