我已经为结构LevelStats实现了运算符'<<'重载,该重载似乎可以很好地处理文件,但是在与std :: cout一起使用时遇到问题
头文件:
struct LevelStats
{
DIFFICULTY level;
std::chrono::duration<double> best_time;
unsigned int games_played;
unsigned int games_won;
};
std::ofstream& operator<<(std::ofstream &os, const LevelStats &stats);
cpp文件:
std::ofstream &operator<<(std::ofstream &os, const LevelStats &stats) {
os << static_cast<unsigned int>(stats.level) << " " << "Best_Time= " << stats.best_time.count()<<std::endl;
os << static_cast<unsigned int>(stats.level) << " " << "Games_Played= " << stats.games_played<<std::endl;
os << static_cast<unsigned int>(stats.level) << " " << "Games_Won= " << stats.games_won<<std::endl;
return os;
}
对于
之类的操作来说效果很好文件<< LevelStats对象
,但用作
时std :: cout << LevelStats对象
结果:
错误:无法绑定“ std :: ostream {aka std :: basic_ostream}” 左值'std :: basic_ostream &&'
编辑:替换为std :: ostream&遇到相同的错误 另一个编辑:参数中的哑巴错误-有效
答案 0 :(得分:3)
您的operator<<
被声明为
std::ofstream& operator<<(std::ofstream &os, const LevelStats &stats);
请注意,您正在传递并返回对std::ofstream
的引用。
写入文件之所以有效,是因为您将传递std::ofstream&
,但是std::cout
不是std::ofstream&
,并且不能绑定到std::ofstream&
。
如果您希望能够使用struct
使用std::cout
输出std::ofstream
,请将operator<<
更改为
std::ostream& operator<<(std::ostream &os, const LevelStats &stats);
std::ofstream
和std::ostream
都可以绑定到std::ostream &os
,从而使您可以将struct
写入文件和std::cout
。