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.
Zusätzlich erscheint die Mehrheit des Bug-Reports um dieses Thema um Strings zu drehen.
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
Ahh - versuchte die Kürze. Entschuldigen Sie. Ich dachte, dass die Angabe im Code sowie ein Screenshot möglicherweise übertrieben gewesen wäre ... – Miller
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. –