2016-08-23 27 views
0

此代碼編譯並在CLion 1.2.4中運行,但GUI顯示錯誤(通過紅色下劃線),輸出嵌套涉及std::ostream,如下所述。這意味着與std:cout一起工作,並且它到目前爲止。在多個Typedef中嵌套重載'<<'

Point是k維空間中的一個點(矢量)。

Cluster是一組這些點(鏈表)。

Clusters是一組聚類(一個向量)。

當我用父類替換typedefs時(std::vector<double>對於Point),指示的錯誤仍然存​​在。

這個錯誤被錯誤報告的理由嗎?

typedef std::vector<double>Point; 
typedef std::list<Point>Cluster; 
typedef std::vector<Cluster>Clusters; 

std::ostream& operator<< (std::ostream& os, Point& v) { 
    if (!v.empty()) { 
     os << v[0]; 
     for(ctr_type i = 1; i < v.size(); ++i) 
      os << ", " << v[i]; 
    } 
    return os; 
} 

std::ostream& operator<< (std::ostream& os, Cluster& v) { 
    if (!v.empty()) { 
     for(Cluster::iterator iter = v.begin(); iter != v.end(); iter++) { 
      os << "\n"; 
      os << *iter; // Error: Binary operator '<<' can't be applied to the expressions of type 'ostream' and 'Point' 
     } 
    } 
    return os; 
} 

std::ostream& operator<< (std::ostream& os, Clusters& v) { 
    if (!v.empty()) { 
     for(Clusters::iterator iter = v.begin(); iter != v.end(); iter++) { 
      os << *iter; // Error: Binary operator '<<' can't be applied to the expressions of type 'ostream' and 'Cluster' 
     } 
    } 
    return os; 
} 

編輯:添加截圖通過Quuxplusone的要求。

enter image description here

enter image description here

此外,大多數圍繞這一問題的bug報告似乎圍繞着琴絃。

+0

這個問題會更好,如果你包含了紅色下劃線問題的圖像(和錯誤信息,如果有的話),還包括一些你已經搜索過CLion bug數據庫的證據(或者提交了一個bug)。實際的答案可能與錯誤信息的文本一樣簡單:例如,「你不能在'std'命名空間中爲庫類型重載'operator <<',或者」RHS參數應該是const-合格「,或其他。 – Quuxplusone

+0

啊 - 試圖簡潔。我很抱歉。我認爲在代碼中指示以及截圖可能已經過度... – Miller

+1

從Code Review遷移,因爲這不是尋求開放式的批評。相反,它是要求對特定問題進行解釋或修復。 –

回答