首先,让我说一句,在Visual Studio中,这个程序可以编译并运行得很好。但是在Linux(g++)上编译相同的文件时,声明和实现重载<<
运算符出现了编译错误。
下面是代码的相关部分。(这是一个.cpp文件,其中包含Google Test案例,还有散布的类和方法定义来支持测试案例。)我省略了除相关部分以外的所有内容(希望如此)。
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
第400行是friend ostream& operator <<
的代码行,第430行是<<
运算符的方法实现。
此外,我不确定为什么编译器错误会引用“||”标记。(我连接到了服务器,并按照一些指示将语言环境设置为“C”,这样输出就有所改善,但仍然不正确。)
谢谢大家。