簡體   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