【问题标题】:Compiler error at line 30 when trying to output vector尝试输出向量时出现第 30 行的编译器错误
【发布时间】:2022-01-16 17:30:57
【问题描述】:

我刚刚开始在线学习 C++ 课程,现在我正在学习向量。有人可以告诉我我在第 30 行和第 31 行做错了什么吗?我似乎无法在索引 0 和 1 处输出 vector_2d 中的内容。谢谢!

# include <iostream>
# include <vector>
using namespace std;

int main()
{
    vector <int> vector1 {};
    vector <int> vector2 {};

    vector1.push_back(10);
    vector1.push_back(20);

    cout << vector1.at(0) << endl;
    cout << vector1.at(1) << endl;
    cout << vector1.size() << endl;



    vector2.push_back(100);
    vector2.push_back(200);

    cout << vector2.at(0) << endl;
    cout << vector2.at(1) << endl;

    vector <vector <int>> vector_2d {};

    vector_2d.push_back(vector1);
    vector_2d.push_back(vector2);

    cout << vector_2d.at(0) << endl;
    cout << vector_2d.at(1) << endl;
    
    return 0;
}

更新,我已经复制并粘贴了大部分完整的错误输出,我限制为 30,000 个字符。 :

C:\Users\FT86TT\AppData\Local\JetBrains\CLion2021.2\cygwin_cmake\bin\cmake.exe --build "/cygdrive/c/Users/FT86TT/Desktop/COP 3363/untitled14/cmake-build-debug" --target untitled14 -- -j 6
Scanning dependencies of target untitled14
[ 50%] Building CXX object CMakeFiles/untitled14.dir/main.cpp.o
/cygdrive/c/Users/FT86TT/Desktop/COP 3363/untitled14/main.cpp: In function 'int main()':
/cygdrive/c/Users/FT86TT/Desktop/COP 3363/untitled14/main.cpp:32:10: error: no match for 'operator<<' (operand types are 'std::ostream' {aka 'std::basic_ostream<char>'} and '__gnu_cxx::__alloc_traits<std::allocator<std::vector<int> >, std::vector<int> >::value_type' {aka 'std::vector<int>'})
   32 |     cout << vector_2d.at(0) << endl;
      |     ~~~~ ^~ ~~~~~~~~~~~~~~~
      |     |                   |
      |     |                   __gnu_cxx::__alloc_traits<std::allocator<std::vector<int> >, std::vector<int> >::value_type {aka std::vector<int>}
      |     std::ostream {aka std::basic_ostream<char>}
In file included from /usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/iostream:39,
                 from /cygdrive/c/Users/FT86TT/Desktop/COP 3363/untitled14/main.cpp:1:
/usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/ostream:108:7: note: candidate: 'std::basic_ostream<_CharT, _Traits>::__ostream_type& std::basic_ostream<_CharT, _Traits>::operator<<(std::basic_ostream<_CharT, _Traits>::__ostream_type& (*)(std::basic_ostream<_CharT, _Traits>::__ostream_type&)) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_ostream<_CharT, _Traits>::__ostream_type = std::basic_ostream<char>]'
  108 |       operator<<(__ostream_type& (*__pf)(__ostream_type&))
      |       ^~~~~~~~
/usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/ostream:108:36: note:   no known conversion for argument 1 from '__gnu_cxx::__alloc_traits<std::allocator<std::vector<int> >, std::vector<int> >::value_type' {aka 'std::vector<int>'} to 'std::basic_ostream<char>::__ostream_type& (*)(std::basic_ostream<char>::__ostream_type&)' {aka 'std::basic_ostream<char>& (*)(std::basic_ostream<char>&)'}
  108 |       operator<<(__ostream_type& (*__pf)(__ostream_type&))
      |                  ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
/usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/ostream:117:7: note: candidate: 'std::basic_ostream<_CharT, _Traits>::__ostream_type& std::basic_ostream<_CharT, _Traits>::operator<<(std::basic_ostream<_CharT, _Traits>::__ios_type& (*)(std::basic_ostream<_CharT, _Traits>::__ios_type&)) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_ostream<_CharT, _Traits>::__ostream_type = std::basic_ostream<char>; std::basic_ostream<_CharT, _Traits>::__ios_type = std::basic_ios<char>]'
  117 |       operator<<(__ios_type& (*__pf)(__ios_type&))
      |       ^~~~~~~~
/usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/ostream:117:32: note:   no known conversion for argument 1 from '__gnu_cxx::__alloc_traits<std::allocator<std::vector<int> >, std::vector<int> >::value_type' {aka 'std::vector<int>'} to 'std::basic_ostream<char>::__ios_type& (*)(std::basic_ostream<char>::__ios_type&)' {aka 'std::basic_ios<char>& (*)(std::basic_ios<char>&)'}
  117 |       operator<<(__ios_type& (*__pf)(__ios_type&))
      |                  ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~
/usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/ostream:127:7: note: candidate: 'std::basic_ostream<_CharT, _Traits>::__ostream_type& std::basic_ostream<_CharT, _Traits>::operator<<(std::ios_base& (*)(std::ios_base&)) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_ostream<_CharT, _Traits>::__ostream_type = std::basic_ostream<char>]'
  127 |       operator<<(ios_base& (*__pf) (ios_base&))
      |       ^~~~~~~~
/usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/ostream:127:30: note:   no known conversion for argument 1 from '__gnu_cxx::__alloc_traits<std::allocator<std::vector<int> >, std::vector<int> >::value_type' {aka 'std::vector<int>'} to 'std::ios_base& (*)(std::ios_base&)'
  127 |       operator<<(ios_base& (*__pf) (ios_base&))
      |                  ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
/usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/ostream:166:7: note: candidate: 'std::basic_ostream<_CharT, _Traits>::__ostream_type& std::basic_ostream<_CharT, _Traits>::operator<<(long int) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_ostream<_CharT, _Traits>::__ostream_type = std::basic_ostream<char>]'
  166 |       operator<<(long __n)
      |       ^~~~~~~~
/usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/ostream:166:23: note:   no known conversion for argument 1 from '__gnu_cxx::__alloc_traits<std::allocator<std::vector<int> >, std::vector<int> >::value_type' {aka 'std::vector<int>'} to 'long int'
  166 |       operator<<(long __n)
      |                  ~~~~~^~~
/usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/ostream:170:7: note: candidate: 'std::basic_ostream<_CharT, _Traits>::__ostream_type& std::basic_ostream<_CharT, _Traits>::operator<<(long unsigned int) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_ostream<_CharT, _Traits>::__ostream_type = std::basic_ostream<char>]'
  170 |       operator<<(unsigned long __n)
      |       ^~~~~~~~
/usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/ostream:170:32: note:   no known conversion for argument 1 from '__gnu_cxx::__alloc_traits<std::allocator<std::vector<int> >, std::vector<int> >::value_type' {aka 'std::vector<int>'} to 'long unsigned int'
  170 |       operator<<(unsigned long __n)
      |                  ~~~~~~~~~~~~~~^~~
/usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/ostream:174:7: note: candidate: 'std::basic_ostream<_CharT, _Traits>::__ostream_type& std::basic_ostream<_CharT, _Traits>::operator<<(bool) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_ostream<_CharT, _Traits>::__ostream_type = std::basic_ostream<char>]'
  174 |       operator<<(bool __n)
      |       ^~~~~~~~
/usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/ostream:174:23: note:   no known conversion for argument 1 from '__gnu_cxx::__alloc_traits<std::allocator<std::vector<int> >, std::vector<int> >::value_type' {aka 'std::vector<int>'} to 'bool'
  174 |       operator<<(bool __n)
      |                  ~~~~~^~~
In file included from /usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/ostream:826,
                 from /usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/iostream:39,
                 from /cygdrive/c/Users/FT86TT/Desktop/COP 3363/untitled14/main.cpp:1:
/usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/bits/ostream.tcc:91:5: note: candidate: 'std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(short int) [with _CharT = char; _Traits = std::char_traits<char>]'
   91 |     basic_ostream<_CharT, _Traits>::
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/bits/ostream.tcc:92:22: note:   no known conversion for argument 1 from '__gnu_cxx::__alloc_traits<std::allocator<std::vector<int> >, std::vector<int> >::value_type' {aka 'std::vector<int>'} to 'short int'
   92 |     operator<<(short __n)
      |                ~~~~~~^~~
In file included from /usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/iostream:39,
                 from /cygdrive/c/Users/FT86TT/Desktop/COP 3363/untitled14/main.cpp:1:
/usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/ostream:181:7: note: candidate: 'std::basic_ostream<_CharT, _Traits>::__ostream_type& std::basic_ostream<_CharT, _Traits>::operator<<(short unsigned int) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_ostream<_CharT, _Traits>::__ostream_type = std::basic_ostream<char>]'
  181 |       operator<<(unsigned short __n)
      |       ^~~~~~~~
/usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/ostream:181:33: note:   no known conversion for argument 1 from '__gnu_cxx::__alloc_traits<std::allocator<std::vector<int> >, std::vector<int> >::value_type' {aka 'std::vector<int>'} to 'short unsigned int'
  181 |       operator<<(unsigned short __n)
      |                  ~~~~~~~~~~~~~~~^~~
In file included from /usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/ostream:826,
                 from /usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/iostream:39,
                 from /cygdrive/c/Users/FT86TT/Desktop/COP 3363/untitled14/main.cpp:1:
/usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/bits/ostream.tcc:105:5: note: candidate: 'std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(int) [with _CharT = char; _Traits = std::char_traits<char>]'
  105 |     basic_ostream<_CharT, _Traits>::
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/bits/ostream.tcc:106:20: note:   no known conversion for argument 1 from '__gnu_cxx::__alloc_traits<std::allocator<std::vector<int> >, std::vector<int> >::value_type' {aka 'std::vector<int>'} to 'int'
  106 |     operator<<(int __n)
      |                ~~~~^~~
In file included from /usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/iostream:39,
                 from /cygdrive/c/Users/FT86TT/Desktop/COP 3363/untitled14/main.cpp:1:
/usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/ostream:192:7: note: candidate: 'std::basic_ostream<_CharT, _Traits>::__ostream_type& std::basic_ostream<_CharT, _Traits>::operator<<(unsigned int) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_ostream<_CharT, _Traits>::__ostream_type = std::basic_ostream<char>]'
  192 |       operator<<(unsigned int __n)
      |       ^~~~~~~~
/usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/ostream:192:31: note:   no known conversion for argument 1 from '__gnu_cxx::__alloc_traits<std::allocator<std::vector<int> >, std::vector<int> >::value_type' {aka 'std::vector<int>'} to 'unsigned int'
  192 |       operator<<(unsigned int __n)
      |                  ~~~~~~~~~~~~~^~~
/usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/ostream:201:7: note: candidate: 'std::basic_ostream<_CharT, _Traits>::__ostream_type& std::basic_ostream<_CharT, _Traits>::operator<<(long long int) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_ostream<_CharT, _Traits>::__ostream_type = std::basic_ostream<char>]'
  201 |       operator<<(long long __n)
      |       ^~~~~~~~
/usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/ostream:201:28: note:   no known conversion for argument 1 from '__gnu_cxx::__alloc_traits<std::allocator<std::vector<int> >, std::vector<int> >::value_type' {aka 'std::vector<int>'} to 'long long int'
  201 |       operator<<(long long __n)
      |                  ~~~~~~~~~~^~~
/usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/ostream:205:7: note: candidate: 'std::basic_ostream<_CharT, _Traits>::__ostream_type& std::basic_ostream<_CharT, _Traits>::operator<<(long long unsigned int) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_ostream<_CharT, _Traits>::__ostream_type = std::basic_ostream<char>]'
  205 |       operator<<(unsigned long long __n)
      |       ^~~~~~~~
/usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/ostream:205:37: note:   no known conversion for argument 1 from '__gnu_cxx::__alloc_traits<std::allocator<std::vector<int> >, std::vector<int> >::value_type' {aka 'std::vector<int>'} to 'long long unsigned int'
  205 |       operator<<(unsigned long long __n)
      |                  ~~~~~~~~~~~~~~~~~~~^~~
/usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/ostream:220:7: note: candidate: 'std::basic_ostream<_CharT, _Traits>::__ostream_type& std::basic_ostream<_CharT, _Traits>::operator<<(double) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_ostream<_CharT, _Traits>::__ostream_type = std::basic_ostream<char>]'
  220 |       operator<<(double __f)
      |       ^~~~~~~~
/usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/ostream:220:25: note:   no known conversion for argument 1 from '__gnu_cxx::__alloc_traits<std::allocator<std::vector<int> >, std::vector<int> >::value_type' {aka 'std::vector<int>'} to 'double'
  220 |       operator<<(double __f)
      |                  ~~~~~~~^~~
/usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/ostream:224:7: note: candidate: 'std::basic_ostream<_CharT, _Traits>::__ostream_type& std::basic_ostream<_CharT, _Traits>::operator<<(float) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_ostream<_CharT, _Traits>::__ostream_type = std::basic_ostream<char>]'
  224 |       operator<<(float __f)
      |       ^~~~~~~~
/usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/ostream:224:24: note:   no known conversion for argument 1 from '__gnu_cxx::__alloc_traits<std::allocator<std::vector<int> >, std::vector<int> >::value_type' {aka 'std::vector<int>'} to 'float'
  224 |       operator<<(float __f)
      |                  ~~~~~~^~~
/usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/ostream:232:7: note: candidate: 'std::basic_ostream<_CharT, _Traits>::__ostream_type& std::basic_ostream<_CharT, _Traits>::operator<<(long double) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_ostream<_CharT, _Traits>::__ostream_type = std::basic_ostream<char>]'
  232 |       operator<<(long double __f)
      |       ^~~~~~~~
/usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/ostream:232:30: note:   no known conversion for argument 1 from '__gnu_cxx::__alloc_traits<std::allocator<std::vector<int> >, std::vector<int> >::value_type' {aka 'std::vector<int>'} to 'long double'
  232 |       operator<<(long double __f)
      |                  ~~~~~~~~~~~~^~~
/usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/ostream:245:7: note: candidate: 'std::basic_ostream<_CharT, _Traits>::__ostream_type& std::basic_ostream<_CharT, _Traits>::operator<<(const void*) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_ostream<_CharT, _Traits>::__ostream_type = std::basic_ostream<char>]'
  245 |       operator<<(const void* __p)
      |       ^~~~~~~~
/usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/ostream:245:30: note:   no known conversion for argument 1 from '__gnu_cxx::__alloc_traits<std::allocator<std::vector<int> >, std::vector<int> >::value_type' {aka 'std::vector<int>'} to 'const void*'
  245 |       operator<<(const void* __p)
      |                  ~~~~~~~~~~~~^~~
In file included from /usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/ostream:826,
                 from /usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/iostream:39,
                 from /cygdrive/c/Users/FT86TT/Desktop/COP 3363/untitled14/main.cpp:1:
/usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/bits/ostream.tcc:119:5: note: candidate: 'std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::basic_ostream<_CharT, _Traits>::__streambuf_type*) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_ostream<_CharT, _Traits>::__streambuf_type = std::basic_streambuf<char>]'
  119 |     basic_ostream<_CharT, _Traits>::
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/bits/ostream.tcc:120:34: note:   no known conversion for argument 1 from '__gnu_cxx::__alloc_traits<std::allocator<std::vector<int> >, std::vector<int> >::value_type' {aka 'std::vector<int>'} to 'std::basic_ostream<char>::__streambuf_type*' {aka 'std::basic_streambuf<char>*'}
  120 |     operator<<(__streambuf_type* __sbin)
      |                ~~~~~~~~~~~~~~~~~~^~~~~~
In file included from /usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/string:55,
                 from /usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/bits/locale_classes.h:40,
                 from /usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/bits/ios_base.h:41,
                 from /usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/ios:42,
                 from /usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/ostream:38,
                 from /usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/iostream:39,
                 from /cygdrive/c/Users/FT86TT/Desktop/COP 3363/untitled14/main.cpp:1:
/usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/bits/basic_string.h:6530:5: note: candidate: 'template<class _CharT, class _Traits, class _Alloc> std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_ostream<_CharT, _Traits>&, const std::basic_string<_CharT, _Traits, _Alloc>&)'
 6530 |     operator<<(basic_ostream<_CharT, _Traits>& __os,
      |     ^~~~~~~~
/usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/bits/basic_string.h:6530:5: note:   template argument deduction/substitution failed:
/cygdrive/c/Users/FT86TT/Desktop/COP 3363/untitled14/main.cpp:32:27: note:   '__gnu_cxx::__alloc_traits<std::allocator<std::vector<int> >, std::vector<int> >::value_type' {aka 'std::vector<int>'} is not derived from 'const std::basic_string<_CharT, _Traits, _Alloc>'
   32 |     cout << vector_2d.at(0) << endl;
      |                           ^
In file included from /usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/bits/ios_base.h:46,
                 from /usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/ios:42,
                 from /usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/ostream:38,
                 from /usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/iostream:39,
                 from /cygdrive/c/Users/FT86TT/Desktop/COP 3363/untitled14/main.cpp:1:
/usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/system_error:263:5: note: candidate: 'template<class _CharT, class _Traits> std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_ostream<_CharT, _Traits>&, const std::error_code&)'
  263 |     operator<<(basic_ostream<_CharT, _Traits>& __os, const error_code& __e)
      |     ^~~~~~~~
/usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/system_error:263:5: note:   template argument deduction/substitution failed:
/cygdrive/c/Users/FT86TT/Desktop/COP 3363/untitled14/main.cpp:32:25: note:   cannot convert 'vector_2d.std::vector<std::vector<int> >::at(0)' (type '__gnu_cxx::__alloc_traits<std::allocator<std::vector<int> >, std::vector<int> >::value_type' {aka 'std::vector<int>'}) to type 'const std::error_code&'
   32 |     cout << vector_2d.at(0) << endl;
      |             ~~~~~~~~~~~~^~~
In file included from /usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/iostream:39,
                 from /cygdrive/c/Users/FT86TT/Desktop/COP 3363/untitled14/main.cpp:1:
/usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/ostream:506:5: note: candidate: 'template<class _CharT, class _Traits> std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_ostream<_CharT, _Traits>&, _CharT)'
  506 |     operator<<(basic_ostream<_CharT, _Traits>& __out, _CharT __c)
      |     ^~~~~~~~
/usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/ostream:506:5: note:   template argument deduction/substitution failed:
/cygdrive/c/Users/FT86TT/Desktop/COP 3363/untitled14/main.cpp:32:27: note:   deduced conflicting types for parameter '_CharT' ('char' and 'std::vector<int>')
   32 |     cout << vector_2d.at(0) << endl;
      |                           ^

【问题讨论】:

  • edit您的问题在您收到错误的行添加评论,并请复制粘贴 fullcomplete 错误输出到问题中。
  • 作为(可能的)提示:什么类型的对象,例如vector_2d.at(0)返回?该类型是否有流输出运算符&lt;&lt; 重载?
  • 编译器错误虽然对您来说可能看起来像胡言乱语,但实际上包含对问题的精确描述。练习阅读错误消息是个好主意。如果您正在写一个关于错误消息的问题,最好将整个消息包含在我们这些读过它的人中。

标签: c++ vector compiler-errors operator-overloading


【解决方案1】:

向量vector_2d 的元素依次是std::vector&lt;int&gt; 类型的对象。

vector <vector <int>> vector_2d {};

向量没有标准的重载operator &lt;&lt;。所以编译器会为这些语句发出错误消息

cout << vector_2d.at(0) << endl;
cout << vector_2d.at(1) << endl;

您可以使用基于范围的 for 循环来输出向量的元素,例如

for ( const auto &item : vector_2d.at(0) )
{
    std::cout << item << ' ';
}
std::cout << '\n';

for ( const auto &item : vector_2d.at(1) )
{
    std::cout << item << ' ';
}
std::cout << '\n';

否则你需要自己为std::vector&lt;int&gt;类重载operator &lt;&lt;,例如

$include <iostream>
#include <vector>

std::ostream &operator <<( std::ostream &os, const std::vector<int> &v )
{
    for (const auto &item : v)
    {
        os << item << ' ';
    }

    return os;
}

int main()
{
    std::vector<int> v = { 1, 2, 3, 4, 5 };

    std::cout << v << '\n';
}

并像这样调用操作员

std::cout << vector_2d.at(0) << '\n';

注意这个向量的初始化

vector <int> vector1 {};
vector <int> vector2 {};

是多余的,没有任何作用。你可以写

vector <int> vector1;
vector <int> vector2;

在这两种情况下都定义了空向量。

请记住,对于您的程序,使用成员函数at 没有什么意义。您可以使用像

这样的下标运算符
vector_2d[0]

否则,当您使用成员函数 at 时,最好将其包含在 try-catch 块中。

【讨论】:

    【解决方案2】:

    vector_2dstd::vector&lt;std::vector&lt;int&gt;&gt; 类型,所以 vector_2d.at(0)vector_2d.at(1)std::vector 类型。由于std::cout 不知道如何打印std::vector&lt;int&gt; 类型的对象,所以会报错。

    如果要打印整个向量,请执行以下操作:

    for(const auto &i : vector_2d.at(0))
    {
        std::cout << i << ' ';
    }
    std::cout << '\n'
    for(const auto &i : vector_2d.at(1))
    {
        std::cout << i << ' ';
    }
    

    【讨论】:

      【解决方案3】:

      我变了:

      cout << vector_2d.at(0) << endl;
      cout << vector_2d.at(1) << endl;
      

      到:

      cout << vector_2d.at(0).at(0) << " " << vector_2d.at(0).at(1) << endl;
      cout << vector_2d.at(1).at(0) << " " << vector_2d.at(1).at(1) << endl;
      

      谢谢大家!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-20
        • 1970-01-01
        • 2020-01-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-04
        • 1970-01-01
        相关资源
        最近更新 更多