我一直无法获得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 ++是如此不同,我还没有参加任何正式的编程入门课程,所以如果这是一个非常好的话,请耐心等待我简单的问题。我非常感谢任何前进的帮助!
谢谢!
答案 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 <<
。您可以自己定义它,也可以自己使用如上所示打印出矢量的每个元素,例如基于循环的范围。