我有一個類我在哪裏超載< <和+運營商這樣的:運算符重載編譯在Visual Studio 2013而不是gcc的
friend MyObject operator+(MyObject lhs, MyObject rhs){
MyObject obj;
obj.Property = lhs.Property + rhs.Property;
return obj;
}
friend std::ostream& operator<<(std::ostream& os, MyObject& n) {
os << MyObject.Property; //property is a double
return os;
}
此編譯在Visual Studio和GNU沒有++ 98問題。我也可以打電話給他們這樣沒有任何問題:
MyObject obj1, obj2;
obj1.PutInValidState();
cout << obj1;
obj1 = obj1 + obj2;
然而,當我打電話給他們,同時這樣的:
cout << obj1 + obj2;
Visual Studio將編譯它(並給出正確的輸出) ,但gnu ++ 98給我錯誤「不匹配'運營商< <'在' std :: operator < <(std :: basic_ostream &,const char *)」。我可以得到它的編制都在這樣的函數定義常量添加到參數:
friend std::ostream& operator<<(std::ostream& os, const MyObject& n) {
這到底是怎麼回事?爲什麼我需要const來使它在gnu ++ 98中工作,而不是在Visual Studio中?
在Visual Studio中打開警告。 G ++實際上在這裏是正確的,VS會告訴你,如果你注意。 –