2016-08-23 75 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迁移,因为这不是寻求开放式的批评。相反,它是要求对特定问题进行解释或修复。 –

回答