首页 > 解决方案 > 初始化结构成员数组时出错

问题描述

我有这个结构:

template<int N>
struct XYarr
{
    double x[N],y[N];

    int size() {return N;}
};

当我尝试初始化它(并通过函数返回它)

return XYarr<size>{x2, y2}; //x2 and y2 are arrays double[size] 

我收到以下错误:无法使用“double [200]”类型的左值初始化“double”类型的数组元素。问题是什么?

标签: c++arrays

解决方案


原始数组没有值语义。因此,它们不能使用=运算符初始化或分配,需要显式复制。例如,使用这样的构造函数:

#include <algorithm>

template<int N>
struct XYarr
{
    double x[N], y[N];

    XYarr(const double(&x2)[N], const double(&y2)[N]) {
        std::copy(std::begin(x2), std::end(x2), x);
        std::copy(std::begin(y2), std::end(y2), y);
    }

    int size() const { return N; }
};
int main() {
    double x2[4]{}, y2[4]{};
    XYarr<4> test{ x2, y2 };
}

推荐阅读