実現したいこと
std::array
にストリーム出力演算子<<
をオーバーロードしたい。
試したこと
std::vector
で同じことをしているサイトを見つけたので、std::array
にも使えるように改造してみました。
エラーが出てしまうので、自分がやった改造だと問題があるようなのですが、どこが問題なのか分かりません。C++に詳しい方にご教示いただけると非常に助かります。
C++
1#include <vector> 2#include <array> 3#include <iostream> 4 5// ネットで見つけた方法(vector) 6template <typename T> 7std::ostream &operator<<(std::ostream &o, const std::vector<T> &v) 8{ 9 o << "{"; 10 for (int i = 0; i < (int)v.size(); ++i) 11 { 12 std::cout << (i > 0 ? ", " : "") << v.at(i); 13 } 14 o << "}"; 15 return o; 16} 17 18// arrayにも使えるように直してみた 19template <typename T, unsigned int N> 20std::ostream &operator<<(std::ostream &o, const std::array<T, N> &a) 21{ 22 o << "{"; 23 for (int i = 0; i < (int)a.size(); ++i) 24 { 25 std::cout << (i > 0 ? ", " : "") << a.at(i); 26 } 27 o << "}"; 28 return o; 29} 30 31 32 33int main() 34{ 35 std::vector<int> v = {1, 2, 3}; 36 std::cout << "v = " << v << std::endl; // v = {1, 2, 3} 37 38 std::array<int, 3> a = {-1, -2, -3}; 39 std::cout << "a = " << a << std::endl; // <- エラーがでる 40 41 return 0; 42}
発生している問題・エラーメッセージ
❯ g++ test.cpp -o test test.cpp: 関数 ‘int main()’ 内: test.cpp:35:25: エラー: no match for ‘operator<<’ (operand types are ‘std::basic_ostream<char>’ and ‘std::array<int, 3>’) 35 | std::cout << "a = " << a << std::endl; | ~~~~~~~~~~~~~~~~~~~ ^~ ~ | | | | | std::array<int, 3> | std::basic_ostream<char> In file included from /usr/local/include/c++/9.3.0/iostream:39, from test.cpp:3:
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/12 09:00