c++を勉強しているものです。
学んでいる途中にどうしてもわからないことがあったので質問させていただきました。
C++
1template < typename Array > 2struct array_iterator 3{ 4 Array & a ; 5 std::size_t i; 6 array_iterator( Array & a,std::size_t i ) 7 : a( a ), i(i){ } 8 9 10 typename Array::reference operator *() ここの部分がわかりません 11 //typename Array::reference array_iterator::operator *() 12 { 13 return a[i] ; 14 } 15 16 array_iterator & operator ++() 17 { 18 ++i; 19 return *this; 20 } 21 22} ; 23 24 25template < typename T, std::size_t N > 26struct array 27{ 28 using iterator = array_iterator<array<T, N>>; 29 using value_type = T ; 30 using reference = T & ; 31 using const_reference = T const & ; 32 using size_type = std::size_t ; 33 34 size_type size() 35 { 36 return N; 37 } 38 39 value_type storage[N] ; 40 41 42 reference operator [] ( size_type i ) 43 { 44 return storage[i] ; 45 } 46 47 48 49} ;
std::arrayを実装するコードです
std::arrayのイテレーターの実装の部分の
typename Array::reference operator *()
のとこの ::reference が何を表しているかがわかりません
また Array & operator *()
ではなぜダメなのかを教えて欲しいです。
加えて,先ほどの下の部分のある
//typename Array::reference array_iterator::operator ()
は自分が学んでいる教材に書かれていた宣言ですが,
宣言の部分をこれにするとエラーが出ます。
教材が間違っているのでしょうか?
それとも自分が間違っているのでしょうか?
エラーメッセージは下記です。
extra qualification on member 'operator'
環境は
Visual Studio Code
M1 mac big sur
です
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/01/10 03:07