我意识到此错误通常是由于某些语法或类型问题造成的,但我不确定如何解决此问题。我认为这可能与 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;
}
如何使用cout输出向量?
为什么会出现错误?
编译器报错,因为没有重载版本<<
处理类型的运算符vector<triangle>
你的功能是什么findRightTriangles()
返回。
<<
仅对大多数内置数据类型重载,对自定义类不重载。
如何使用cout输出向量?
有两种方法:
解决方案一:
两步程序:
Step1:您将必须迭代向量并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
}
Step 2:你不得不超载<<为了triangle
类也是如此。
ostream& operator<<( ostream& os, const triangle &) {}
解决方案2:
一步解决。
或者,您可以超载<<
对于向量类型本身:
ostream& operator<<( ostream& os, const vector<triangle>&)
{
}
我个人更喜欢解决方案 1。它更具可读性并且通常人们已经有一个重载的<<
对于正在使用的向量类型,它可以被利用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)