首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 運算子多載:istream 提取運算子無法處理 const char[2] 錯誤解決

     編輯:程式設計綜合問答

錯誤訊息

error C2679: binary '>>': no operator found which takes a right-hand operand of type 'const char [2]'

原因分析

程式碼中 in >> z.hour >> ":" >> z.minute >> ":" >> z.second; 試圖直接從串流提取字面常數 ":" (型別 const char[2]),但 operator>> 無此多載。提取運算子只能讀取**變數**,不能匹配固定字元。

正確做法

  1. 讀取字元變數:char colon; in >> z.hour >> colon >> z.minute >> colon >> z.second;
  2. 驗證分隔符:讀取後檢查 colon == ':',否則設定 in.setstate(std::ios::failbit)。
  3. 完整範例:
    istream& operator>>(istream& in, Time& z) {
        char c;
        if (in >> z.hour >> c >> z.minute >> c >> z.second) {
            if (c != ':') in.setstate(ios::failbit);
        }
        if (!in) z = Time();
        return in;
    }
    

輸出運算子補充

原碼 out < return out; 殘缺,正確應為:

ostream& operator<<(ostream& out, const Time& z) {
    return out << z.hour << ':' << z.minute << ':' << z.second;
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved