簡體   English   中英

std::cout 不適用於結構的重載 '<<' 運算符

[英]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::ofstreamstd::ostream都可以綁定到std::ostream &os ,允許您將struct寫入文件和std::cout

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM