Linux g ++编译错误:错误:在'||'之前预期','或'...'代币

时间:2013-07-01 03:39:34

标签: c++ compiler-errors g++

首先让我说这在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

第400行是friend ostream& operator <<行,第430行是<<运算符的方法实现。

另外,我不确定为什么编译器错误会引用“||”令牌。 (我被推到服务器上,我按照一些说明将语言环境设置为“C”,这有点改善了输出,但它看起来仍然不正确。)

谢谢大家。

1 个答案:

答案 0 :(得分:6)

or在C ++中是保留(§2.12/ 2 C ++ 11)。它是||(§2.6/ 2)的替代标记,因此您不能将其用作标识符。将变量从or重命名为其他内容以解决此问题。

比照。 this existing post有关替代令牌的更多详细信息。