2016-08-23 3 views
0

Dieser Code wird in CLion 1.2.4 kompiliert und ausgeführt, die GUI zeigt jedoch Fehler (über rote Unterstreichung) mit der folgenden Verschachtelung der Ausgabe an, die std::ostream beinhaltet. Dies soll mit std:cout arbeiten, und es tut so weit.Verschachtelte Überladung von '<<' innerhalb mehrerer Typdefinitionen

Point ist ein Punkt (ein Vektor) im k-dimensionalen Raum.

Cluster ist eine Menge dieser Punkte (eine verkettete Liste).

Clusters ist eine Reihe von Clustern (ein Vektor).

Wenn ich die Typedefs durch die Elternklasse (std::vector<double> für Point) ersetzen, bleibt der angezeigte Fehler bestehen.

Gibt es Gründe dafür, dass dieser Fehler falsch gemeldet wird?

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; 
} 

EDIT: Screenshots Hinzufügen wie Quuxplusone angefordert.

enter image description here

enter image description here

Zusätzlich erscheint die Mehrheit des Bug-Reports um dieses Thema um Strings zu drehen.

+0

Diese Frage wäre besser, wenn Sie ein Bild der roten Unterstreichung in Frage (und Fehlermeldung, wenn vorhanden), und auch einige Beweise, dass Sie die CLion Bug-Datenbank bereits gesucht (oder einen Fehler). Die tatsächliche Antwort könnte so einfach sein wie der Text der Fehlermeldung: zB "Sie dürfen' Operator '' für Bibliothekstypen im 'std' Namespace nicht überladen, oder" der RHS Parameter sollte konstant sein. qualifiziert "oder was auch immer. – Quuxplusone

+0

Ahh - versuchte die Kürze. Entschuldigen Sie. Ich dachte, dass die Angabe im Code sowie ein Screenshot möglicherweise übertrieben gewesen wäre ... – Miller

+1

Von Code Review migriert, weil dies keine offene Kritik anstrebt. Es wird vielmehr nach einer Erklärung oder Lösung für ein bestimmtes Problem gefragt. –

Antwort

Verwandte Themen