簡體   English   中英

重載運算符時出錯<

[英]Error when Overloading the operator <<

_3DTocka operator<<(ostream& os, _3DTocka _3D){
    cout << "(" << _3D.x << "," << _3D.y << "," << _3D.z << ")" << endl;
}

上面是我的代碼,它給出了一個錯誤:它必須只接受一個參數(1行)

_3DTocka是類的名稱。

三個問題:首先,您要聲明函數錯誤,它應該返回作為第一個參數接收的ostream引用。 然后,它不使用該ostream參數,而是硬編碼為cout 第三,它不返回任何東西,這將導致不確定的行為

關於實際的編譯錯誤,您很可能將函數定義為類中的成員函數。 定義為類成員的輸出運算符與定義為獨立函數的輸出運算符完全不同:當聲明為成員函數時,它應該帶有一個參數,並且是輸出到對象的值。 如果它是一個獨立函數(或在類中定義為friend ),則用於將作為第二個參數傳遞的對象輸出到作為第一個參數傳遞的對象。


關於錯誤:

friend ostream& operator<<(ostream& os, _3DTocka _3D) {
    return os << '(' << _3D.x << ',' << _3D.y << ',' << _3D.z << ')';
}

一些注意事項:*我已將字符串文字轉換為字符文字。 處理字符串比處理單個字符要復雜得多*我現在使用提供的輸出流,這意味着您可以將其用於任何類型的輸出流(例如文件)*我已經刪除了endl ,它不是必需的,應該提供通過此功能的“調用方”。

現在你可以做

_3DTocka o = ...;

cout << o << endl;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM