3

为什么以下代码无法编译:

#include <array>

struct A
{
    std::array<size_t, 5> i_;

    A() {}

    A( A const& a)
    : i_{ a.i_ } {}
};

int main()
{
    A a1;
    A a2 = a1;

    return 0;
}

GCC 4.8.1 说

错误:无法在初始化中将“const std::array”转换为“long unsigned int”:i_{ a.i_}

4

2 回答 2

4

问题是这std::array是一个聚合,因此您不能使用大括号来调用 copy-ctor。您需要指定元素。这也解释了您的错误消息,它正在尝试将 转换为a.i_数组的元素,即size_t. 既然你不能那样做,你必须用它i_(a.i_)来创建一个副本。

于 2013-10-14T19:43:27.630 回答
2

它应该是

A( A const& a )
: i_( a.i_ ) {}
于 2013-10-14T19:38:26.567 回答