【问题标题】:c++ error c2440 using a constructor with 2d params [closed]c++错误c2440使用带有2d参数的构造函数[关闭]
【发布时间】:2014-10-29 14:14:08
【问题描述】:

我有一个矩阵类,其中包含一个二维元素数组作为成员变量。并且有一个以二维数组作为参数的自定义 ctor。奇怪的是,当我尝试对其进行测试时,它会抛出错误 C2440: error C2440: '' : cannot convert from 'float [3][3]' to 'Matrix'。代码如下:

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];
        }
    }
}

ma​​in.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);
}

我在这里做错了什么?提前致谢。

【问题讨论】:

    标签: c++ arrays constructor compiler-errors


    【解决方案1】:

    您从float[3][3] 数组到float **(您的构造函数)的转换无效:

    Matrix::Matrix(float *elements[])
    

    由于您正在处理固定的 3x3 矩阵,因此您应该执行以下操作:

    Matrix::Matrix(float(&elements)[3][3]) // Reference to 3x3 array
    

    【讨论】:

    • @BawenangRukmokoPardianPutra 很高兴我能帮上忙。如果它解决了您的问题,请不要忘记将其标记为已接受的答案。
    • 是的,我已经做到了。是因为有几分钟的窗口限制来接受我没有早点做的答案。顺便说一句,如果可以的话,另一个问题。那么如果你想传递一个任意长度的二维向量,你会怎么做呢?
    • 由于这是标记为 C++,我建议使用 std::vector。无论如何,如果你真的想用 C 数组来做,你应该手动指定尺寸 (stackoverflow.com/q/3991057/1938163)
    • 好吧,除非你使用 typedef,否则 2D std::vector 会让人难以阅读。但是,是的,你是对的。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 2017-08-02
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 2014-01-19
    • 1970-01-01
    • 2016-04-08
    相关资源
    最近更新 更多