問題タブ [ostream]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - ostream の << 演算子を適切にオーバーロードする方法は?
行列演算用に C++ で小さな行列ライブラリを作成しています。ただし、以前はそうではなかったのに、私のコンパイラは文句を言います。このコードは 6 か月間棚に置かれ、その間にコンピューターを debian etch から lenny (g++ (Debian 4.3.2-1.1) 4.3.2) にアップグレードしましたが、同じ g++ を使用する Ubuntu システムでも同じ問題が発生します。 .
私のマトリックスクラスの関連部分は次のとおりです。
そして「実装」:
これは、コンパイラによって表示されるエラーです。
matrix.cpp:459: エラー: 'std::ostream& Math::Matrix::operator<<(std::ostream&, const Math::Matrix&)' は 1 つの引数を取る必要があります
私はこのエラーに少し混乱していますが、6 か月間多くの Java を実行した後、私の C++ は少し錆びてきました。:-)
c++ - 独自の ostream/streambuf を作成するにはどうすればよいですか?
教育目的で、ostream とストリーム バッファを作成して実行したいと考えています。
- << myVar; を実行するときのエンディアンを修正します。
- std:cout を使用したり、ファイルに書き込む代わりに、deque コンテナーに格納します。
- << を実行した回数、.write を実行した回数、書き込んだバイト数、flush() を実行した回数などの追加データをログに記録します。しかし、私はすべての情報を必要としません。
オーバーロードを試みましたが、ひどく失敗しました。私はやってみました
私のbasic_stringstream2クラス(私はbasic_stringstreamを私のcppファイルにコピーして貼り付けて変更しました)で、コードはbasic_ostreamを使用し続けました. コードを調べたところ、xsputn をオーバーロードする必要があるようです (このページhttp://www.cplusplus.com/reference/iostream/ostreamには記載されていません) が、他に何がオーバーロードする必要がありますか? クラスを構築するにはどうすればよいですか (継承する必要があるものなど)。
c++ - テンプレート化されたostream<<演算子を作成しないコンパイラ
私はクラスを持っており、頭の中で次のように定義されています:
実装ファイルには、次のものがあります。
これはすべてかなりコーシャに見えます。ただし、この演算子(つまり、std :: cout << MyClass())を使用しようとすると、次のリンカーエラーが発生します。
コンパイラが自動的にこれを生成していないことに驚いています...私が間違っていることについて何か提案はありますか?
c++ - ostreamを使用してc++でunsignedcharを16進数として出力するにはどうすればよいですか?
C++で符号なし8ビット変数を操作したいと思います。算術に関する限り、unsigned char
またはトリックを実行します( AFAIKはのエイリアスにすぎないため、これは予想されます。つまり、デバッガーがそれを提示します。uint8_t
uint8_t
unsigned char
問題は、C ++でostreamを使用して変数を出力すると、charとして扱われることです。私が持っている場合:
その場合、出力は次のようになります。
それ以外の
を使用してみuint8_t
ましたが、前に述べたように、unsigned char
それはtypedefされているので、同じように動作します。変数を正しく出力するにはどうすればよいですか?
編集:コード全体の多くの場所でこれを行います。印刷するたびにキャストせずにこれを行う方法はありますか?int
inheritance - std :: ostreamから継承する方法は?
私はぐるぐる回っていますが、これに対する簡単な答えを見つけることができません。そして、STLが一般的にそうであるように、それは単純でなければなりません。
std::ostreamからパブリックに継承するMyOStreamを定義したいと思います。ストリームに何かが書き込まれるたびにfoo()を呼び出したいとしましょう。
ostreamのパブリックインターフェイスが非仮想であることを理解していますが、どのように行うことができますか?クライアントがMyOStreamでoperator<<とwrite()およびput()の両方を使用できるようにし、クラスの拡張機能を使用できるようにしたい。
c++ - C ++クラスをカスタムostream、sstreamのように動作させます
私はC++クラスを持っており、MyObject
このデータをosstreamと同じようにフィードできるようにしたいと考えています(ただし、直接sstreamとは異なり、受信データを特別な方法でフォーマットします)。MyObjectが与えられた入力を食べるために演算子をオーバーロードする方法を理解できないようです。
私はそれが欲しいので、供給されるすべてのアイテムは::に囲まれています
したがって、与えられた例では、s = ":Hello::12345"が最終的な結果になるはずです。私の質問は、オブジェクトに、いつ<<something
でも何かの周りに::を置くことをどのように伝えることができるかです。
これは可能ですか?
c++ - これは、左ストリーム演算子をオーバーロードする正しい方法ですか?(C ++)
この関数宣言は私にエラーを与えます:
エラーは次のとおりです。
handは私が作成したクラスであり、displayはタイプのパブリックデータメンバーですchar*
。
誰かが私が間違っていることを教えてもらえますか?
c++ - std :: ostreamに何かを出力し、std :: ostreamを返す関数?
ostream
渡されたに何かを出力し、ストリームを返す関数を次のように記述したいと思います。
このように値を出力し、で行ったように、関数呼び出しを出力演算子チェーンに埋め込むと便利main()
です。
ただし、これは機能せず、次のように出力されます。
必要な出力は次のようになります。
どうすればこれを修正できますか?operator<<
代わりに定義する必要がありますか?
更新:目的の出力がどうなるかを明確にしました。
UPDATE2:直接印刷するのではなく、関数を使用して、なぜそのような数値を印刷するのか理解できない人もいました。これは単純化された例であり、実際には、関数はではなく複雑なオブジェクトを出力しますint
。
c++ - 文字列をキー、ostream を値としてマップを設定するにはどうすればよいですか?
次の方法で C++ でコンテナを使用しようとしてmap
います: キーは でstring
、値は type のオブジェクトですofstream
。私のコードは次のようになります。
ただし、上記のコードをコンパイルしようとすると、次のエラーが発生します。
何がうまくいかないのですか?を使用してこれを行うことができない場合map
、そのようなキーと値のペアを作成する他の方法はありますか?
注: コードをテストすると、正常にmap<string, int> foo;
動作します。