2013-07-01 115 views
3

讓我開始說這個編譯並在Visual Studio中運行良好。但是,當我在Linux(g ++)上編譯相同的文件時,我得到編譯錯誤來聲明和實現運算符的過載。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」,這有助於提高輸出,但它看起來仍然不正確。)

謝謝大家。

回答

6

or保留在C++(§2.12/ 2 C++ 11)。這是||(§2.6/ 2)的替代標記,因此您不能將其用於標識符。將該變量從or重命名爲其他內容來解決此問題。

參考this existing post有關替代令牌的更多詳細信息。

+1

謝謝!我想也許它是與「或」的使用有關(我已經通過將類從「或」改名爲「orderrequest」),但我從來沒有真正想過或是C++使用的令牌。你爲我節省了更多的時間! –

相關問題