C++の初学者です。
Visual Studio 2017で、VC++でコンパイルしています。
以下のコードは実行できるのですが、
C++
1#include <iostream> 2#include <array> 3 4template < typename T, std::size_t N > 5struct array 6{ 7 using value_type = T; 8 using reference = T & ; 9 using size_type = std::size_t; 10 11 size_type size(){return N;} 12 13 value_type storage[N]; 14 reference operator [] (size_type i){return storage[i];} 15}; 16 17template < typename Array > 18void print(Array & c) 19{ 20 for (std::size_t i = 0; i != c.size(); ++i) 21 { 22 std::cout << c[i]<< "\n"; 23 } 24} 25 26int main() 27{ 28 array<int, 5> a = { 1,2,3,4,5 }; 29 print(a); 30}
関数printのリファレンス引数cについて、値を変更できないようconstにするとコンパイルエラーとなります。原因と解決方法を教えてください。
void print(Array const & c)
◆エラーメッセージ
__Severity Code Description Project File Line Suppression State
Error C2662 'array<int,5>::size_type array<int,5>::size(void)': cannot convert 'this' pointer from 'const array<int,5>' to 'array<int,5> &'
Severity Code Description Project File Line Suppression State
Error C2678 binary '[': no operator found which takes a left-hand operand of type 'const array<int,5>' (or there is no acceptable conversion)__
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/12 14:59
2021/06/12 15:02
2021/06/13 00:17 編集
2021/06/13 01:11
2021/06/13 03:51