gcc和clang都无法编译循环程序

时间:2014-11-09 09:56:03

标签: c++ gcc vector clang

我一直无法获得gcc和clang来编译我为教科书练习而编写的这个简单程序。该程序的目标是从标准输入接受2个简单的整数值,然后将2个值打印到标准输出。我写的程序如下:

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<cmath>

using namespace std;
inline void keep_window_open() {char ch; cin>>ch;}

int main() 
{

  vector<int> vect;
  int number;
  int i = 0 ;
  while (cin >> number && vect.size() < 3) 
    {
    vect.push_back(number);
    }

  cout << vect << '\n';

}  

当我用gcc编译程序时,我收到以下错误:

Kohs-MacBook-Pro:Learning_C++ Kohaugustine$ gcc drill_chapter_4_v2.cpp -o drill_chapter_4_v2 -stdlib=libstdc++ -lstdc++
drill_chapter_4_v2.cpp:21:8: error: invalid operands to binary expression ('ostream' (aka 'basic_ostream<char>') and 'vector<int>')
  cout << vect << '\n';
  ~~~~ ^  ~~~~

当我尝试使用clang时,同样的错误“二进制表达式的操作数无效”也会发生。

有谁知道这里究竟是什么问题?

我是C ++的新手,虽然我以前有过使用Python的经验,但转向C ++是如此不同,我还没有参加任何正式的编程入门课程,所以如果这是一个非常好的话,请耐心等待我简单的问题。我非常感谢任何前进的帮助!

谢谢!

3 个答案:

答案 0 :(得分:2)

你不能打印这样的整个矢量。使用循环:

for (auto value : vect)
    std::cout << value << ' ';

答案 1 :(得分:1)

C ++标准库中没有operator<<(std::ostream, std::vector<int>)

可以写一个,例如:

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

我应该指出,原位迭代矢量是典型的解决方案,所以:

   for(auto i : vect)
   {
      std::cout << i << ' ';
   }

将是我期望在代码中看到的内容。

答案 2 :(得分:0)

更改代码的这一部分

  while (cin >> number && vect.size() < 3) 
    {
    vect.push_back(number);
    }

  cout << vect << '\n';

以下方式

  while ( vect.size() < 3 && cin >> number  ) 
  {
    vect.push_back( number );
  }

  for ( int x : vect ) cout << x << '\n';

至于错误,那么向量没有operator <<。您可以自己定义它,也可以自己使用如上所示打印出矢量的每个元素,例如基于循环的范围。