错误:没有匹配'运算符<<"在'std::cout
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:
两步程序:
步骤1:您必须遍历向量和每个包含triangle
的cout
。
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;
这假设您有一个operator<<
作为triangle
类型。
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);
如果上面的函数没有定义,那么你会得到一个错误,就像你现在遇到的一样。
运算符"<<"没有为类型三角形重载。你查过这个链接吗?
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- 如何显式调用运算符<<
- 'char (*RtlpNumberOf(T (&)[N]))[N]':无法从"char *"
- Arduino IDE 错误 - 无法找到数字文字运算符"运算符""f900ff"
- "inline"、"constexpr"或"noexcept"
- "非静态数据成员之前需要构造函数" - 我是否使用"boost::variant"
- 我必须安装"libbitcoin-server"才能包含"bitcoin.hpp"
- 模板操作员&lt;未打电话
- C / CUDA中的模板方法是3个角括号(&lt;&lt;&lt;)
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- 错误:调用"std::vector<:vector<int>>::p ush_back(std::vector<std::__cxx11::basic_string<
- C 建造者Clang STD :: Sill,找不到超载的操作员&lt;
- 为什么STD :: MAP需要操作员&lt;以及我如何写一个
- 为什么“操作员”需要const但不是为“运营商&lt;”
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- “并非所有控制路径都返回一个值./&quot“控制可能达到非空隙功能的末端”.验证时循环时
- '&lt;'''&lt;'''&quot的模板类错误''令牌”