C++ 如何在实例化数组类[C+;+;]后插入整个数组

C++ 如何在实例化数组类[C+;+;]后插入整个数组,c++,arrays,matrix,C++,Arrays,Matrix,我有一个名为MATRIX的类,其中包含元素[4][4]数组和一些其他用于加法、减法等的函数 我想从main函数向矩阵中插入整个数组值,但我总是会出错 代码如下: class MATRIX { public: float ele[4][4]; float rows; float cols; MATRIX Add(MATRIX m); MATRIX Subtract(MATRIX m); MATRIX Multiply(MATRIX m);

我有一个名为MATRIX的类,其中包含元素[4][4]数组和一些其他用于加法、减法等的函数

我想从main函数向矩阵中插入整个数组值,但我总是会出错

代码如下:

class MATRIX
{
public:
    float ele[4][4];
    float rows;
    float cols;

    MATRIX Add(MATRIX m);
    MATRIX Subtract(MATRIX m);
    MATRIX Multiply(MATRIX m);
    MATRIX Transpose();
    MATRIX Initialize();
};

int main(int argc, char ** argv){

float x_angle = 0, y_angle = 0, z_angle = 0;
MATRIX xRotation, yRotation, zRotation;

xRotation.ele = {
    { 1, 0, 0, 0 },
    { 0, cosf(x_angle), -sinf(x_angle), 0 },
    { 0, sinf(x_angle), cosf(x_angle), 0 },
    { 0, 0, 0, 1 } };
}

错误消息告诉我表达式必须是可修改的左值

,您尝试添加值的方式意味着要在Initialization中使用,这不是您的情况。您可以使用
std::copy

float array[4][4] = {
    { 1, 0, 0, 0 },
    { 0, cosf(x_angle), -sinf(x_angle), 0 },
    { 0, sinf(x_angle), cosf(x_angle), 0 },
    { 0, 0, 0, 1 }
};


std::copy(&array[0][0], &array[0][0]+(4*4), &xRotation.ele[0][0]);

2d数组通常是一个难题,如果可以,请避免使用它们(声明sizey*sizex的1d数组并访问
数组[y*sizex+x]


c数组是不可分配的,但是
std::array
可以从数组或兼容的
std::initializer\u list
分配。因此,这将起作用:

#include <cmath>
#include <array>

using floats = std::array<float, 4>;
using floats2 = std::array<floats, 4>;

class MATRIX
{
public:
    floats2 ele;
    float rows;
    float cols;

    MATRIX Add(MATRIX m);
    MATRIX Subtract(MATRIX m);
    MATRIX Multiply(MATRIX m);
    MATRIX Transpose();
    MATRIX Initialize();
};

int main(int argc, char ** argv){

    float x_angle = 0, y_angle = 0, z_angle = 0;
    MATRIX xRotation, yRotation, zRotation;

    xRotation.ele = {
        floats{ 1, 0, 0, 0 },
        floats{ 0, cosf(x_angle), -sinf(x_angle), 0 },
        floats{ 0, sinf(x_angle), cosf(x_angle), 0 },
        floats{ 0, 0, 0, 1 } };
}
#包括
#包括
使用floats=std::array;
使用floats2=std::array;
类矩阵
{
公众:
漂浮物;
浮动行;
浮子;
矩阵加法(矩阵m);
矩阵减法(矩阵m);
矩阵乘法(矩阵m);
矩阵转置();
矩阵初始化();
};
int main(int argc,字符**argv){
浮动x_角=0,y_角=0,z_角=0;
基体X旋转、旋转、Zr旋转;
xRotation.ele={
浮点数{1,0,0,0},
浮点数{0,cosf(x_角),-sinf(x_角),0},
浮点数{0,sinf(x_角),cosf(x_角),0},
浮点数{0,0,0,1};
}

main返回如果没有
return
main,则@deimus
main的可能重复项将返回0statement@tobi303确实如此,但总体而言,明确回报被认为是一种良好的做法;)@戴莫斯,你能提供一个参考或一些理由吗?对我来说,最好的做法是不要编写过多的代码
MATRIX x;
x.set({ ... });
#include <cmath>
#include <array>

using floats = std::array<float, 4>;
using floats2 = std::array<floats, 4>;

class MATRIX
{
public:
    floats2 ele;
    float rows;
    float cols;

    MATRIX Add(MATRIX m);
    MATRIX Subtract(MATRIX m);
    MATRIX Multiply(MATRIX m);
    MATRIX Transpose();
    MATRIX Initialize();
};

int main(int argc, char ** argv){

    float x_angle = 0, y_angle = 0, z_angle = 0;
    MATRIX xRotation, yRotation, zRotation;

    xRotation.ele = {
        floats{ 1, 0, 0, 0 },
        floats{ 0, cosf(x_angle), -sinf(x_angle), 0 },
        floats{ 0, sinf(x_angle), cosf(x_angle), 0 },
        floats{ 0, 0, 0, 1 } };
}