簡體   English   中英

“實現類似字符串的類時,沒有名為'const_reference'的類型”錯誤

[英]“no type named 'const_reference' ” error when implementing a string-like class

我正在嘗試實現一個與std :: string具有類似行為的類,並且我在std :: copy行中收到錯誤:

Str& operator+=(const Str& s){
    std::copy(s.data.begin(), s.data.end(), std::back_inserter(data));
    return *this;
}

'data'是vec <char>類型的對象,vec是我自己實現的類似矢量的類,它本身似乎工作得很好。

它還說:

C:\\ MinGW \\ bin .. \\ lib \\ gcc \\ mingw32 \\ 3.4.2 ........ \\ include \\ c ++ \\ 3.4.2 \\ bits \\ stl_iterator.h ||實例化`std :: back_insert_iterator <vec <char >>>:|

聽起來您的vec不符合容器要求,因此不能保證可以使用與容器一起使用的標准設施(例如back_inserter )。

這些要求在C ++ 11的表96中指定,盡管C ++ 98中的表65可能更適合您的古老編譯器。 其中一個要求是嵌套的const_reference類型。

檢查std::back_inserterstd::copy 特別是, std::back_inserter需要一個滿足概念Container的參數。 至少這意味着實施標准的§23.2.1,其中列出的要求之一是:

X::const_reference | T |的常數值 編譯時間

即容器類型中的typedef const_reference

back_inserter是一個方便的函數,它在容器上構造一個back_insert_iterator ; 在這種情況下, data

你說過, data是你自己開發的vector type類。 為了使其工作,您的vector類必須定義一個const_reference typedef。 像這樣的東西:

template <typename Item>
class Vec
{
public:
  typedef const Item& const_reference;
};

對容器的任何實現都有許多其他要求。 這些在C ++ 03標准的23.1容器要求(包括表65)中概述。

有關要求的討論,另請參閱此問題

嘗試添加

typedef T value_type;
typedef const value_type&const_reference;

在你的vec <T>身體里。

問題需要更多細節,比如你的vec課程。

你得到的錯誤究竟是什么? 請分享有關錯誤的更多信息。 控制台日志會有所幫助。

std :: copy接受兩個輸入迭代器。( http://www.cplusplus.com/reference/algorithm/copy/ )你確定像類這樣的向量是否正確處理迭代器?

另外,請檢查您的vec是否支持back_inserter所需的容器要求。 http://www.cplusplus.com/reference/iterator/back_inserter/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM