0
我有一个矩阵类,它有一个2d元素数组作为成员变量。还有一个定制的ctor,其中包含2d数组作为参数。奇怪的是当我尝试测试它时,它会抛出错误C2440:错误C2440:'':无法从'float [3] [3]'转换为'Matrix'。下面的代码:C++错误c2440使用带2d参数的构造函数
Matrix.h
class Matrix
{
public:
Matrix();
~Matrix();
Matrix(const Matrix& other);
Matrix(float e_11, float e_12, float e_13,
float e_21, float e_22, float e_23, \
float e_31, float e_32, float e_33);
Matrix(float *elements[]);
private:
float* m_ElementsA; //< The array of elements of the vector
}
Matrix.cpp
#include "../include/Matrix.h"
Matrix::Matrix()
{
m_ElementsA = new float[9];
for (int i = 0; i < 9; ++i)
{
*(m_ElementsA + i) = 0.0f;
}
}
Matrix::~Matrix()
{
delete[] m_ElementsA;
}
Matrix::Matrix(const Matrix& other)
{
m_ElementsA = new float[9];
unsigned int row, column;
for (int i = 0; i < 9; ++i)
{
GetRowColumnFromIndex(i, row, column);
*(m_ElementsA + i) = other.GetElement(row, column);
}
}
Matrix::Matrix(float e_11, float e_12, float e_13, \
float e_21, float e_22, float e_23, \
float e_31, float e_32, float e_33)
{
m_ElementsA = new float[9];
*m_ElementsA = e_11;
*(m_ElementsA + 1) = e_12;
*(m_ElementsA + 2) = e_13;
*(m_ElementsA + 3) = e_21;
*(m_ElementsA + 4) = e_22;
*(m_ElementsA + 5) = e_23;
*(m_ElementsA + 6) = e_31;
*(m_ElementsA + 7) = e_32;
*(m_ElementsA + 8) = e_33;
}
Matrix::Matrix(float *elements[])
{
m_ElementsA = new float[9];
unsigned int row, column;
for (int i = 0; i < 3; ++i)
{
for (int j = 0; j < 3; ++j)
{
*(m_ElementsA + (i * 3) + j) = elements[i][j];
}
}
}
的main.cpp
int _tmain(int argc, _TCHAR* argv[])
{
float arr[3][3] =
{
{1.1f, 2.2f, 3.3f},
{4.4f, 5.5f, 6.6f},
{7.7f, 8.8f, 9.9f}
};
Matrix mat3 = Matrix(arr);
return(0);
}
做什么我在这里做错了吗?提前致谢。
@BawenangRukmokoPardianPutra很高兴我帮了忙。如果它解决了您的问题,请不要忘记将其标记为已接受的答案。 – 2014-10-29 14:28:28
是的,我已经做到了。这是因为几分钟的时间限制才接受我之前没有做过的答案。顺便说一句,如果可以的话,另一个问题如果你想传递任意长度的二维矢量,那么你如何做到这一点? – 2014-10-29 14:56:10
由于这是标记为C++,我会推荐使用std :: vector。无论如何,如果你真的想用C数组来实现它,你应该手动指定尺寸(http://stackoverflow.com/q/3991057/1938163) – 2014-10-29 14:58:34