ERROR: no match for 'operator<<\" in 'std::cout

青春壹個敷衍的年華 提交于 2019-12-02 02:01:44
Alok Save

Why the error?
The compiler reports an error because there is no overloaded version of << operator to handle the type vector<triangle> which your function findRightTriangles() returns.
<< is overloaded only for most of the built-in data types and not for custom classes.

How to output the vector using cout?
There are two ways:

Solution 1:
A two step procedure:

Step1: You will have to iterate through the vector and cout each contained 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: You will have to overload << for the triangle class as well.

ostream& operator<<( ostream& os, const triangle &) {}

Solution 2:
One step Solution.
Alternately, You can overload << for vector type itself:

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

}

I would personally prefer the Solution 1. It is more readable & Usually more often than not one would already have an overloaded << for the vector type being used and it could be leveraged.

Use an iterator http://www.cplusplus.com/reference/std/iterator/.

Example would be

vector<triangle>::iterator it;

cout << "myvector contains:";
for ( it=myvector.begin() ; it < myvector.end(); it++ )
    cout << " " << *it;

cout << endl;

return 0;

This assumes you have an operator<< for the triangle type.

For cout to be able to output your object you have to tell it how. One way is to overload the << operator:

ostream& operator<<( ostream& os, const vector<triangle>& vec ) {
    ...
    ... // here output to os the way you want it to
    os << ...
    return os;
}

You'll have to create an overloaded version of operator<< for std::cout. It would look something like the following:

ostream& operator<<(ostream& out, const vector<triangle>& triangles);

and at the end of the function, you simply do a return out; in order to return the std::ostream object out that was passed as the first argument (in your case that will be std::cout).

In other words, when you do

MyFoo object;
std::cout << object;

this is "syntactic sugar" for the following function call:

MyFoo object;
operator<<(std::cout, object);

and would call a version of operator<< that looked like:

ostream& operator<<(ostream& out, const MyFoo& my_object);

If the above function was not defined, then you'd get an error like you're currently experiencing.

orezvani

Operator "<<" is not overloaded for the type triangle. Have you checked this link out?

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!