これが Visual Studio で正常にコンパイルおよび実行されることから始めましょう。しかし、Linux (g++) で同じファイルをコンパイルすると、<<
演算子のオーバーロードの宣言と実装でコンパイル エラーが発生します。
コードの関連部分を以下に抜粋します。(これは、Google テスト ケースを含む .cpp ファイルであり、テスト ケースをサポートするためにクラスとメソッドの定義が散りばめられています。) コードの関連部分以外はすべて省略しました (希望します)。
class orderrequest : public msg_adapter {
public:
// ... snip
friend bool operator ==(const orderrequest &or1, const orderrequest &or2);
friend ostream& operator <<(ostream &out, const orderrequest &or); // compiler error here
};
bool operator ==(const orderrequest &or1, const orderrequest &or2) {
bool result = or1.symbol == or2.symbol
&& or1.orderQty == or2.orderQty;
// ... snip
return result;
}
// compiler error here
ostream& operator <<(ostream &out, const orderrequest &or) {
out << "symbol=" << or.symbol << ",orderQty=" << or.orderQty;
return out;
}
<<
コンパイルでいくつかのエラーがスローされますが、これらはすべて、オペレーターをオーバーロードしようとしたことに関連しているようです。
EZXMsgTest.cpp:400: error: expected ',' or '...' before '||' token
EZXMsgTest.cpp:428: error: expected ',' or '...' before '||' token
EZXMsgTest.cpp: In function 'std::ostream& operator<<(std::ostream&, const orderrequest&)':
EZXMsgTest.cpp:430: error: expected primary-expression before '||' token
EZXMsgTest.cpp:430: error: expected primary-expression before '.' token
EZXMsgTest.cpp:430: error: expected primary-expression before '||' token
EZXMsgTest.cpp:430: error: expected primary-expression before '.' token
行 400friend ostream& operator <<
は行であり、行 430 は<<
オペレーターのメソッド実装です。
また、コンパイラ エラーが "||" を参照する理由がわかりません。トークン。(私はサーバーにパテされており、いくつかの指示に従ってロケールを「C」に設定し、出力をいくらか改善しましたが、それでも正しく見えません。)
みんな、ありがとう。