C++使 ostream 和 istream 运算符过载
C++ overloading the ostream and istream operators
此代码的目的是读取包含名称,十亿美元和国家/地区的文件,这些文件由制表符分隔。 我需要创建一个类亿万富翁,并使 ostream 和 istream 运算符重载以方便 将文件读入向量并将内容写入输出。然后创建一个将国家/地区字符串映射到一对的地图。该对包含第一个的副本 名单中每个国家的亿万富翁和一个计数器来计算每个亿万富翁的数量 国家。但是,我不能重载流和流运算符。
我试图在亿万富翁类中重载这些运算符,但我最终遇到了错误。
#include <iostream>
#include <vector>
#include <utility>
#include <algorithm>
#include <set>
#include <map>
#include <string>
#include <iterator>
#include <fstream>
#include <istream>
#include <ostream>
using namespace std;
class Billionaire{
//overload the ostream and istream operators to conveniently
//read the file into a vector and write the content to the output
public :
friend ostream &operator<<(ostream &stream, Billionaire o);
friend istream &operator>>(istream &stream, Billionaire &o);
};
int main(){
std::ifstream stream("Forbes2018.txt");
if(!stream){
cout << " WARNING : File not found !" << endl ;
}
vector <Billionaire> billionaires;
copy (istream_iterator<Billionaire>( stream ),
istream_iterator<Billionaire>() , back_inserter( billionaires ));
copy (billionaires.begin () , billionaires.end () ,
ostream_iterator < Billionaire >( cout , "n"));
map < string , pair < const Billionaire , size_t >> m;
}
我有 2 个错误: :-1:错误:找不到体系结构x86_64的符号 :-1:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用(
您的重载尝试是一个良好的开端:您已向编译器宣布将出现重载:
friend ostream &operator<<(ostream &stream, Billionaire o);
friend istream &operator>>(istream &stream, Billionaire &o);
不幸的是,缺少一些东西。这就是链接器消息所说的。您仍然需要告诉编译器此重载是什么样的:
ostream &operator<<(ostream &stream, Billionaire o) {
// put your code here
...
return stream;
}
istream &operator>>(istream &stream, Billionaire &o) {
// put your code here
...
return stream;
}
如果你在Billionaire
中定义了这些运算符,编译器将无法在这里使用它们:在main中,你调用独立运算符(你已经声明为friend(,而你会定义类成员,这些类成员必须在Billionaire
上用.
或->
运算符调用,并且具有与你在main中使用的不同的签名。
相关文章:
- iStream 运算符跳过空格字符
- 如何为缺少预定义运算符而不扩展命名空间"std"的标准类型定义运算符>> (istream &, ...)?
- C++使 ostream 和 istream 运算符过载
- 使用 istream 提取运算符进行 csv 解析:如何检测缺失的字段值?
- Istream 运算符重载'>>'导致无限循环
- 错误:与"运算符>>"不匹配(操作数类型为"std::istream
- 无法使用三元运算符有条件地分配"istream &"?
- 使用 getline 重载 istream 运算符>> 会出错
- 没有运算符匹配这些操作数;操作数类型为: std::istream >> const char [5]
- 错误:"运算符>>"不匹配 重载 istream 运算符
- 为什么 istream 类的运算符<<在 C++ 中具有引用的返回/参数类型?
- 没有运算符">>"匹配这些操作数操作数操作数类型为: std::istream >>双*
- 为什么COUT在朋友函数中不起作用,该功能超载了操作员&lt;&lt;这是一个iStream运算符
- 希望修复 main.cpp 与"std::istream&<< int&"运算符不匹配
- 重载运算符'>>'的使用不明确(操作数类型'istream'(又名"basic_istream<char>")和"MyIncreEx")
- 错误在模板类中调用过载的ISTream运算符
- C++ istream 运算符>>不良数据处理
- 为什么我可以重载 istream 的运算符>>用于字符串?
- 在C++中使用非友元方法重载 I/O 运算符 |&istream 和 &ostream 函数
- 仅在重载>>运算符 istream 中获取字符串: