首先让我说这在 Visual Studio 中编译和运行良好。但是当我在 Linux (g++) 上编译相同的文件时,我得到了声明和实现<<
运算符重载的编译错误。
代码的相关部分摘录如下。(它是一个 .cpp 文件,其中包含 Google 测试用例,并且散布了类和方法定义以支持测试用例。)除了代码的相关部分之外,我省略了所有代码(我希望如此)。
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”,这在一定程度上改善了输出,但看起来仍然不正确。)
谢谢大家。