[英]std::cout don't work with overloaded '<<' operator for struct
我已經為 struct LevelStats 實現了運算符 '<<' 重載,這似乎適用於文件,但在與 std::cout 一起使用時會遇到問題
header 文件:
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;
}
這適用於像這樣的操作
文件 << 級別統計 object
,但當用作
std::cout << LevelStats object
結果:
錯誤:無法將“std::ostream {aka std::basic_ostream}”左值綁定到“std::basic_ostream&&”
編輯:替換為 std::ostream& 遇到相同的錯誤另一個編輯:arguments 中的愚蠢錯誤 - 它有效
您的operator<<
被聲明為
std::ofstream& operator<<(std::ofstream &os, const LevelStats &stats);
請注意,您正在傳遞並返回對std::ofstream
的引用。 寫入文件將起作用,因為您將傳遞std::ofstream&
,但std::cout
不是std::ofstream&
並且不能綁定到std::ofstream&
。
如果您希望能夠使用std::cout
output 您的struct
,同時仍然能夠使用std::ofstream
,請將您的operator<<
更改為
std::ostream& operator<<(std::ostream &os, const LevelStats &stats);
std::ofstream
和std::ostream
都可以綁定到std::ostream &os
,允許您將struct
寫入文件和std::cout
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.