[英](Error) no match for 'operator>>' in 'std::cout >> namesArray(counter)(0)'
[英]ERROR: no match for 'operator<<" in 'std::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;
}
如何使用 cout 输出向量?
为什么会出错?
编译器报告错误,因为没有<<
运算符的重载版本来处理函数findRightTriangles()
返回的类型vector<triangle>
。
<<
仅针对大多数内置数据类型而不是自定义类重载。
如何使用 cout 输出向量?
有两种方式:
解决方案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
}
第 2 步:您还必须为triangle
类重载<<
。
ostream& operator<<( ostream& os, const triangle &) {}
解决方案2:
一步解决。
或者,您可以重载<<
向量类型本身:
ostream& operator<<( ostream& os, const vector<triangle>&)
{
}
我个人更喜欢解决方案 1。它更具可读性,并且通常情况下,对于正在使用的向量类型,通常已经有一个重载的<<
并且可以利用它。
使用迭代器http://www.cplusplus.com/reference/std/iterator/ 。
例子是
vector<triangle>::iterator it;
cout << "myvector contains:";
for ( it=myvector.begin() ; it < myvector.end(); it++ )
cout << " " << *it;
cout << endl;
return 0;
这假设您有一个用于triangle
类型的operator<<
。
为了让cout
能够输出您的对象,您必须告诉它如何输出。 一种方法是重载<<
运算符:
ostream& operator<<( ostream& os, const vector<triangle>& vec ) {
...
... // here output to os the way you want it to
os << ...
return os;
}
您必须为std::cout
创建operator<<
的重载版本。 它看起来像下面这样:
ostream& operator<<(ostream& out, const vector<triangle>& triangles);
在函数结束时,您只需return out;
为了返回std::ostream
对象out
这是作为第一个参数传递(在你的情况,这将是std::cout
)。
换句话说,当你做
MyFoo object;
std::cout << object;
这是以下函数调用的“语法糖”:
MyFoo object;
operator<<(std::cout, object);
并且会调用一个看起来像这样的operator<<
版本:
ostream& operator<<(ostream& out, const MyFoo& my_object);
如果上面的函数没有定义,那么你会得到一个像你目前遇到的错误。
运算符“<<”不会为三角形类型重载。 你检查过这个链接吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.