繁体   English   中英

std :: array错误:没有名为'assign'的成员

[英]std::array error: Has no member named 'assign'

在下面的代码中,编译器抱怨为: struct std::array<double,5ul> has no member named 'assign' 这里似乎有可能。 为什么会这样? (编译:​​g ++ 4.8.2)

#include <array>

int main()
{
    std::array<double,5> arr;
    arr.assign(4.); // error: has no member named 'assign'
    return 0;
}

array::assign()是一个Visual Studio扩展。 您正在使用g ++进行编译。 检查这里的标准g ++数组

如前所述, std::array没有assign成员。

现在有趣的问题变成了原因 毕竟,其他容器都有一个assign成员方法!

我会注意到,与其他容器不同, std::array具有固定的大小。 如果你使用std::vector<T>::assign (它将是一个等价的近似值),则适当调整向量的大小以匹配所分配的序列的大小; 但是,使用数组是不可能的:

  • 如果分配的序列比数组短,你会怎么做?
  • 如果分配的序列比数组长,你会怎么做?

这是违反直觉的,因为其他容器的问题不会出现,因为它们的尺寸只是在飞行中进行调整。

出于类似的原因, std::array没有: reservecapacityclearinsertemplaceerasepush / pop (和variants)或resize 他们都假设容器的大小可能会有所不同。

这很简单,你可以看到这里没有std数组的assign成员函数。 但是,您应该可以使用名为fill的成员函数。

assign方法它不是std::array的成员。 成员fill执行assign在TR1中执行的操作。

assign最初是std::tr1::array (来自TR1 )的一部分,并且被改为fill大致C ++ 0x(现在的C ++ 11) 草案n2798 (2008)。

这不是微软的扩展,我想他们可能已经维护了这种方法,以便与生产中的tr1实现兼容,并支持tr1实现(方法实现完全相同)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM