多个 Typedef 中“<<”的嵌套重载
Nested Overloading of '<<' within Multiple Typedefs
此代码在 CLion 1.2.4 中编译和运行,但是 GUI 指示错误(通过红色下划线),输出嵌套涉及 std::ostream
,如下所述。这旨在与 std:cout
一起使用,到目前为止它确实如此。
Point
是k维的一个点(一个向量)space.
Cluster
就是这些点的集合(链表)。
Clusters
是一组簇(向量)。
当我将 typedef 替换为父 class(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 的要求添加屏幕截图。
此外,围绕此问题的大多数错误报告似乎都围绕着字符串。
这是 CLion 中的错误:
https://youtrack.jetbrains.com/issue/CPP-6013
希望它能在不久的将来得到修复。
此代码在 CLion 1.2.4 中编译和运行,但是 GUI 指示错误(通过红色下划线),输出嵌套涉及 std::ostream
,如下所述。这旨在与 std:cout
一起使用,到目前为止它确实如此。
Point
是k维的一个点(一个向量)space.
Cluster
就是这些点的集合(链表)。
Clusters
是一组簇(向量)。
当我将 typedef 替换为父 class(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 的要求添加屏幕截图。
此外,围绕此问题的大多数错误报告似乎都围绕着字符串。
这是 CLion 中的错误:
https://youtrack.jetbrains.com/issue/CPP-6013
希望它能在不久的将来得到修复。