错误:'std :: cout中'operator <<'不匹配

pho*_*ton 2 c++ cout

我意识到这个错误通常是由于一些语法或类型问题,但我不知道如何解决这个问题.我认为它可能与findRt的类型有关.

vector<triangle> findRightTriangles(unsigned long l, unsigned long h) {

<triangle> retval; // storage for return value.

triangle t;    
double what;

for(t.s1 = 3; t.s1 <= h; t.s1++) {
    for(t.s2 = t.s1; t.s2 <= h; t.s2++) {
        what = sqrt((t.s1*t.s1) + (t.s2*t.s2));
        t.s3 = static_cast<unsigned int>(what);
        if(((t.s1*t.s1)+(t.s2*t.s2)) != (t.s3*t.s3) 
            || t.s1+t.s2+t.s3 < l 
                || t.s1+t.s2+t.s3 > h) {
            continue;
        }
        else if(t.s1+t.s2+t.s3 <= h 
            && t.s1+t.s2+t.s3 >= l 
                && t.s1+t.s2 > t.s3 
                    && ((t.s1*t.s1)+(t.s2*t.s2)) == (t.s3*t.s3)) {
            retval.push_back(t);
        }
    }
}
return retval;
}

int main(){

unsigned long min, max;

cin >> min >> max;

    //Here is the problem:
cout << findRightTriangles(min, max) << endl;

return 0;
}
Run Code Online (Sandbox Code Playgroud)

如何使用cout输出向量?

Alo*_*ave 7

为什么错误?
编译器报告错误,因为没有重载版本的<<运算符来处理vector<triangle>函数findRightTriangles()返回的类型.
<<仅对大多数内置数据类型而不是自定义类重载.

如何使用cout输出向量?
有两种方法:

解决方案1:
两步程序:

第1步:您必须遍历向量并cout包含每个向量triangle.

std::vector<triangle>::const_iterator iter= vec.begin();
for(iter; iter != vec.end(); ++iter)
{
    cout<<*iter; //This is what step 2 provides for
}
Run Code Online (Sandbox Code Playgroud)

第2步:你也必须为课程重载<<triangle.

ostream& operator<<( ostream& os, const triangle &) {}
Run Code Online (Sandbox Code Playgroud)

解决方案2:
一步解决方案.
或者,您可以<<为矢量类型本身重载:

ostream& operator<<( ostream& os, const vector<triangle>&)
{

}
Run Code Online (Sandbox Code Playgroud)

我个人更喜欢解决方案1.它更具可读性.通常情况下,<<对于正在使用的矢量类型,已经有一个重载,并且可以利用它.