问题描述
我正在尝试使用哨兵控制循环将 ASCII 数字转换为相应的字母表字母。
编译器给了我 cout 旁边的错误:
Invalid operands to binary expression
('std::__1::ostream' (aka 'basic_ostream<char>') and 'vector<char>')
我正在使用 XCode。这是我当前的代码:
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main(){
int num;
char intermediary;
vector<char> Letters;
cin>>num;
while (num!= -1){
intermediary=char(num);
Letters.push_back(intermediary);
cin>>num;
}
cout<<Letters<<endl;
return 0;
}
解决方法
std::vector
的 operator<<
does not have overload,所以当你有 cout << Letters
时,我们可以说,vector
没有定义什么做,当 <<
应用于它时。
一段时间后,您会知道当对类应用运算符时,类可以定义适当的行为。这些定义就像普通函数一样,只是有特殊的名称不同。因此,像 <<
这样的类型(非内置)的运算符本质上只是函数,具有返回类型、主体和参数列表。
如果您想在 vector
中打印所有元素,您应该考虑以下方法:
// ...other code as before
for (const auto &c : Letters) // A range for,goes over the whole vector
std::cout << c;
// ...
此外,您应该将条件更改为:while (cin>>num)
。所以整个程序应该是这样的:
int main(){
int num;
char intermediary;
vector<char> Letters;
while (cin>>num) { // Until valid input,to stop press Ctrl+D (End Of File)
intermediary=char(num);
Letters.push_back(intermediary);
}
for (const auto &i : Letters)
cout << i;
return 0;
}
另请注意,可打印的 ASCII 字符从数字 32 开始。
您可以在here(以及许多其他地方的许多地方)中了解更多关于范围的信息。