問題タブ [stream-operators]
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++ - 私のクラスのストリーム演算子<<>>をオーバーロードする正しい方法は何ですか?
クラスのストリーム演算子はクラスではなくストリームクラスの関数であるように見えるため、C++でクラスのストリーム演算子をオーバーロードする方法について少し混乱しています。これを行う通常の方法は何ですか?現時点では、「getfrom」演算子の定義があります
動作します。Thingクラスの定義には記載されていません。実装時にThingクラスのメンバーにアクセスできるようにしたいのですが、これを行うにはどうすればよいですか?
c++ - QDataStream & QDataStream::operator>> ( char *& s ) の問題
このコードは機能しません。結果の QByte は空です。char* を使用しても同じです。奇妙なことに、同じコードが別のプログラムで機能します。両方の違いを見つけようとしています。これは、int、uint、quint8などを使用すると機能します
c++ - gdbでoperator<<を呼び出す
operator<<(std::ostream &os, const ClassX &x)
gdb内からどのように呼び出しますか?
言い換えると、gdbでオブジェクトをどのように出力しますか?
call std::cout<<x
またはcall operator<<(std::cout, x)
私のために働いていないようです!
何か案は?
c++ - C++ のオーバーロードされた << 演算子が見つかりません
これが私を悩ませているものです:operator <<
ヘッダーファイルFAPPDebug.hに次のようなオーバーロードがあります:
FAPPDebug.cpp の実装:
および対応する関数呼び出し:
これがどれほど奇妙に見えても、これは MSVC2010 を使用する Windows でコンパイル (および動作) します。
debug() は、現在の場所から FAPPDebug オブジェクトを作成する単なるマクロです。(debug() << "...") の周りの () の余分なセットに注意してください。それがなければ、私が望むものを生成していません。
一方、g++ 4.4 を使用する Linux では、次のエラーが発生します。
MessageBroker.cpp:91: エラー: 'QTextStream(stdout, QFlags((QIODevice::OpenModeFlag)3u)) の 'operator<<' に一致しません << ((FAPPDebug*)((FAPPDebug*)FAPPDebug(417, () (const char*)"MessageBroker.cpp"), ((const char*)(& PRETTY_FUNCTION )), (LogLevel)7u).FAPPDebug::operator<<(((const char*)"モジュール")))- >FAPPDebug::operator<<(((const QString&)((const QString*)(& ModuleBase::getModuleDescription()())))))->FAPPDebug::operator<<(((const char*)"アプリケーション オブジェクトが設定されていないため終了します。"))' /usr/local/Trolltech/Qt-4.8.2/include/QtCore/qtextstream.h:184: 注: 候補は次のとおりです: FAPPDebug.h:94: 注: QTextStream& 演算子<<(QTextStream&, FAPPDebug&)
(候補はたくさんありますが、重要なものだけ残しました)
関数呼び出しを次のように変更しました。
エラーメッセージが表示されます:
MessageBroker.cpp: メンバー関数 'bool MessageBroker::init(Application*, const QString&)': MessageBroker.cpp:91: エラー: 'operator<<(QTextStream, FAPPDebug&)' /usr/local の呼び出しに一致する関数がありません/Trolltech/Qt-4.8.2/include/QtCore/qchar.h:396: 注: 候補は次のとおりです: QDataStream& operator<<(QDataStream&, const QChar&) /home/ferenc/work/trunk/Core/Common/FAPPDebug.h :94: 注:
QTextStream& operator<<(QTextStream&, FAPPDebug&)
ご覧のとおり、正しい関数が毎回見つかります (はい、FAPPDebug.h ヘッダーは MessageBroker.cpp に含まれています) が、「より標準に準拠した」コンパイラはそれを使用できませんでした。これはどこかで標準の理解に誤りがあると感じているので、それを見つけるためにあなたの助けを求めています.
EDIT:演算子は友人として宣言されていますclass FAPPDebug
EDIT2: debug() はマクロであり、次のように定義されます。
すなわち。現在の位置を示すパラメーターを持つ FAPPDebug オブジェクトを作成しただけです。
ありがとう!f.
c++ - テンプレート クラスのネストされた型をテンプレート パラメーターとして使用する
テンプレート クラスのネストされた型を使用してテンプレート関数を実装したいと考えています。
ここで、非メンバーおよび非フレンド関数として実装する方が良いことを読みました。operator <<
したがって、関数toStream()
とtableToStream()
外部を移動することにしましたMyClass
:
非メンバーおよび非フレンド関数に変換MyClass::toStream()
するのは簡単です。operator <<
operator <<
しかし、私は呼び出す代わりに単独で使用したいMyClass::tableToStream()
:
関数についてはMyClass::tableToStream()
、次の実装を使用できますが、関数が一般的すぎるため、ストリーム出力が混乱する可能性があります (任意の型を にすることができますTABLE
)。
したがって、ネストされた型に制限したいと思いMyClass
ます。MyClass::tableToStream()
以下は、標準operator <<
の非メンバーおよび非フレンド関数に変換する私の試みの1つです。
しかし、エラーは約typename MyClass<T>::TABLE
です。
c++ - ネストされた名前空間でのストリーム演算子のオーバーロード
最近、クラスを実装するとき、ストリーム演算子を追加する演算子という名前のネストされた名前空間を作成します。
これを行うのは、クラスの名前空間 os 以外の名前空間でそれらを使用する必要があることが多いためです。
ちょうどいいところに、それだけです。
ここでは、クラス ポイント、クラス セグメント、およびセグメントのストリームがポイントのストリームを呼び出すそれらのストリーム オペレーターの例を示します。しかし...コンパイルできません:
クラスポイント:
クラス区分:
主要:
これはコンパイルできず、次のようになります。
名前空間演算子を削除すると正しくコンパイルされますが、先ほど言ったように、それは避けたいと思います。
この問題は、別の名前空間演算子内で名前空間演算子を使用して呼び出すことに関係していると思います。
何か案は?
c++ - (エラー) 'std::cout >> namesArray(counter)(0)' の 'operator>>' に一致しません
この特定の配列インデックスでエラーが発生する理由が本当にわかりません。テキストファイルから学生の成績を入力するプログラムを書いています。このファイルは、2 列 10 行の形式 (名、姓、グレード 1、グレード 2、グレード 3、グレード 4、グレード 5) です。実行中、ファイルを 1 行ずつループし、名前を 10 行 x 2 列に配置し、成績を 10 行 x 5 列に配置する必要があります。それはクラスの問題です。なぜ私たちはそのようにしているのか。基本的に、データはループ中に分割され、namesArray と gradesArray にロードされます。IDE で識別されたエラー行の両側と行位置に*を付けました
最後に、ここに私のコードがあります:
c++ - クラスに抽出演算子を実装する方法は?
バイナリ ファイルの一部をさまざまな型の変数に読み込むクラスがあります。
この回答で説明されているように、ストリーム抽出演算子を実装したいと思います。
コードは次のエラー メッセージでコンパイルに失敗します: error C2804: binary 'operator >>' has too many parameters
。ストリーム抽出演算子を適切にオーバーライドするには? タイプを区別し、連鎖可能にする必要があります。