std :: coutは、構造体のオーバーロードされた '<<'演算子では機能しません

SomeRandomNick

structLevelStatsの演算子 '<<'オーバーロードを実装しました。これはファイルでうまく機能するようですが、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&に置き換えられ、同じエラーが発生します別の編集:引数のばかげた間違い-動作します

Kaldrr

あなたoperator<<は次のように宣言されています

std::ofstream& operator<<(std::ofstream &os, const LevelStats &stats);

への参照を渡して返すことに注意してくださいstd::ofstreamファイルへの書き込みはstd::ofstream&を渡すため機能しますが、ではstd::coutなく、にstd::ofstream&バインドできませんstd::ofstream&

あなたが出力できるようにしたい場合は、あなたのstruct使用してstd::cout、まだ使用することができbeeingている間std::ofstream、あなたの変更operator<<には

std::ostream& operator<<(std::ostream &os, const LevelStats &stats);

両方std::ofstreamstd::ostreamに結合することができstd::ostream &os、あなたの書き込みすることができ、struct両方のファイルとしますstd::cout

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

std :: variantのオーバーロードされた演算子<<()でstd :: endlをストリーミングできません

分類Dev

Clangはstd :: Experimental :: optionalでは正しく機能しません

分類Dev

std :: upper_boundの比較としてオーバーロードされたoperator()を持つ構造体を合法的に使用できますか?

分類Dev

easylogging ++と同じ方法でオーバーロードされた挿入演算子をチェーンすることにより、std :: cout構文を模倣するC ++クラスを作成することは可能ですか?

分類Dev

std :: mergeはstd :: asyncでは機能しません

分類Dev

suppressWarnings()はパイプ演算子では機能しません

分類Dev

std :: stringは=演算子で更新されません

分類Dev

変換演算子はsleep_untilでは機能しません

分類Dev

オーバーロードされた演算子 '<<'の例外指定子がstd :: ostreamオブジェクトに対して機能しないのに、ライブラリで定義されているオブジェクトに対して機能するのはなぜですか?

分類Dev

演算子はC ++のオーバーロードと同じで、明らかに機能していません

分類Dev

MINGW gccでコンパイルする場合、オーバーロードされたnew演算子はstd :: stringに対して呼び出されません

分類Dev

「>>、<<」オーバーロードのような演算子は機能しません

分類Dev

C ++の古い構造体演算子のオーバーロード構文が変更されましたか?

分類Dev

C ++では、演算子のオーバーロードプレフィックスが機能しません

分類Dev

Like演算子はLinqクエリでは機能しません

分類Dev

単純な演算子のオーバーロードは機能しません

分類Dev

std :: vector <ComparisonPair>型の実行可能なオーバーロードされたoperator []はありません

分類Dev

std :: findはオーバーロードされた==演算子を持つオブジェクトのベクトルを検索します

分類Dev

std :: findはオーバーロードされた==演算子を持つオブジェクトのベクトルを検索します

分類Dev

std :: endlは、専用の非テンプレート関数が実装されていますが、オーバーロードされた演算子<<では機能しません

分類Dev

std :: sort()は定義されたグローバル演算子<()を検索しません

分類Dev

std :: listのオーバーロードされたブラケット演算子

分類Dev

オーバーロードされた演算子<<テンプレートはstd :: listでは機能しませんが、std :: vectorでは機能します

分類Dev

std :: bindはstd :: sortでは機能しません

分類Dev

2 つのオーバーロードされた std::forward はどのように機能しますか?

分類Dev

std::cout のオーバーロードにおける & 文字の機能は何ですか?

分類Dev

オーバーロードされた[]演算子は、疑似3D配列では機能しません

分類Dev

Mongodbの位置演算子$または$ []は、配列要素では機能しません

分類Dev

マップで使用するためのglmオーバーロード演算子は機能しません

Related 関連記事

  1. 1

    std :: variantのオーバーロードされた演算子<<()でstd :: endlをストリーミングできません

  2. 2

    Clangはstd :: Experimental :: optionalでは正しく機能しません

  3. 3

    std :: upper_boundの比較としてオーバーロードされたoperator()を持つ構造体を合法的に使用できますか?

  4. 4

    easylogging ++と同じ方法でオーバーロードされた挿入演算子をチェーンすることにより、std :: cout構文を模倣するC ++クラスを作成することは可能ですか?

  5. 5

    std :: mergeはstd :: asyncでは機能しません

  6. 6

    suppressWarnings()はパイプ演算子では機能しません

  7. 7

    std :: stringは=演算子で更新されません

  8. 8

    変換演算子はsleep_untilでは機能しません

  9. 9

    オーバーロードされた演算子 '<<'の例外指定子がstd :: ostreamオブジェクトに対して機能しないのに、ライブラリで定義されているオブジェクトに対して機能するのはなぜですか?

  10. 10

    演算子はC ++のオーバーロードと同じで、明らかに機能していません

  11. 11

    MINGW gccでコンパイルする場合、オーバーロードされたnew演算子はstd :: stringに対して呼び出されません

  12. 12

    「>>、<<」オーバーロードのような演算子は機能しません

  13. 13

    C ++の古い構造体演算子のオーバーロード構文が変更されましたか?

  14. 14

    C ++では、演算子のオーバーロードプレフィックスが機能しません

  15. 15

    Like演算子はLinqクエリでは機能しません

  16. 16

    単純な演算子のオーバーロードは機能しません

  17. 17

    std :: vector <ComparisonPair>型の実行可能なオーバーロードされたoperator []はありません

  18. 18

    std :: findはオーバーロードされた==演算子を持つオブジェクトのベクトルを検索します

  19. 19

    std :: findはオーバーロードされた==演算子を持つオブジェクトのベクトルを検索します

  20. 20

    std :: endlは、専用の非テンプレート関数が実装されていますが、オーバーロードされた演算子<<では機能しません

  21. 21

    std :: sort()は定義されたグローバル演算子<()を検索しません

  22. 22

    std :: listのオーバーロードされたブラケット演算子

  23. 23

    オーバーロードされた演算子<<テンプレートはstd :: listでは機能しませんが、std :: vectorでは機能します

  24. 24

    std :: bindはstd :: sortでは機能しません

  25. 25

    2 つのオーバーロードされた std::forward はどのように機能しますか?

  26. 26

    std::cout のオーバーロードにおける & 文字の機能は何ですか?

  27. 27

    オーバーロードされた[]演算子は、疑似3D配列では機能しません

  28. 28

    Mongodbの位置演算子$または$ []は、配列要素では機能しません

  29. 29

    マップで使用するためのglmオーバーロード演算子は機能しません

ホットタグ

アーカイブ