_3DTocka operator<<(ostream& os, _3DTocka _3D){
cout << "(" << _3D.x << "," << _3D.y << "," << _3D.z << ")" << endl;
}
以上是我的代碼,它提供了一個錯誤: 它必須只有一個參數(1號線)錯誤重載運算符時<<
_3DTocka是類的名稱..
_3DTocka operator<<(ostream& os, _3DTocka _3D){
cout << "(" << _3D.x << "," << _3D.y << "," << _3D.z << ")" << endl;
}
以上是我的代碼,它提供了一個錯誤: 它必須只有一個參數(1號線)錯誤重載運算符時<<
_3DTocka是類的名稱..
三個問題:首先你聲明函數是錯誤的,它應該返回它接收的ostream
引用作爲第一個參數。然後它不使用該參數ostream
,但硬編碼爲cout
。第三,它不會返回任何東西,這將導致undefined behavior。
關於您的實際編譯錯誤,您最有可能將該函數定義爲該類中的成員函數。定義爲類成員的輸出運算符與定義爲獨立函數的輸出運算符完全不同:當聲明爲成員函數時,它應該帶有一個參數,並且它是將值輸出到對象的值。如果它是一個獨立函數(或者在類中定義爲friend
),那麼它用於輸出作爲第二個參數傳遞的對象「to」作爲第一個參數傳遞的對象。
關於錯誤:
friend ostream& operator<<(ostream& os, _3DTocka _3D) {
return os << '(' << _3D.x << ',' << _3D.y << ',' << _3D.z << ')';
}
的幾個注意事項: *我所做的字符串文字到字符文字。處理字符串比處理單個字符更有效 *我現在使用提供的輸出流,這意味着您可以使用這個任何類型的輸出流(如文件) *我已經刪除了endl
,這不是必需的並應由該功能的「調用者」提供。
現在你可以做
_3DTocka o = ...;
cout << o << endl;
我把它作爲'friend ostream&operator <<(ostream&os,_3DTocka _3D){'現在它就起作用了。感謝您的更正。另外,我不明白關於返回任何東西的部分?在課堂上,老師從來沒有提到它必須返回一些東西,他只是給了我們一個類似的例子與cout。 – user3402189
@ user3402189該函數沒有被聲明爲返回'void',實際上它*必須*返回作爲第一個對象傳遞的流引用,否則會產生意外的崩潰。看到我更新的答案。 –
你聲明'運營商<<'作爲類的成員函數? –
@πάνταῥεῖ我沒有..我該怎麼做? – user3402189
其實,是的,它在課堂上,在公共部分。 (在第一篇文章中的代碼) – user3402189