与 std::cout 中的运算符<<不匹配
No match for operator << in std::cout
我试着像这样打印一个向量中的每个元素:
vector<users>::iterator i;
for(i = userlist.begin(); i<userlist.end(); i++)
{
cout << *i << "n";
}
然后我得到这样的错误:
no match for 'operator<<' in 'std::cout << (&i)->__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* [with _Iterator = users*, _Container = std::vector<users, std::allocator<users> >]()'
有什么明显的我错过了吗?
您是否定义了带有此签名的函数?:
std::ostream & operator<<(std::ostream &, const users &);
它应该不应该是用户的成员函数,尽管它可以是朋友,也可以不是,这取决于你。原型应该放在类用户的头文件中,主体应该放在源文件(.cpp)中。我不知道你的用户类是如何定义的,或者你想要如何格式化输出,但是函数定义应该看起来像这样:
std::ostream & operator<<(std::ostream & os, const users & U)
{
os << U.some_data_members;
os << U.and_or_some_member_functions();
os << whatever;
return os;
}
一旦你定义了std::ostream &operator<<(std::ostream &, user&);
,考虑修改你的代码使用std::copy
代替for
循环:
// leaving off the `std::`, you're not using it for `cout`.
//
copy(userlist.begin(), userlist.end(), ostream_iterator<user>(cout, "n"));
是否为users类定义了流操作符?
您需要编写一个ostream::operator<<()
的重载,它接受users
的一个实例,或者编写一些转换操作符,它将提供从user
到operator<<()
版本之一知道的某种类型的自动转换。
您需要定义自己的公共函数operator<<接受ostream和users的形参:
std::ostream& operator<<(std::ostream&, users&);
对不起,是users
还是user
?
相关文章:
- Qt SQLite没有查询或参数计数不匹配
- 模板参数推导失败,函数参数/参数不匹配
- 在使用累加时,C++中的运算符+不匹配
- C++ 与操作员不匹配<<
- 在 Arduino 上使用 sscanf 会导致与 const char * 不匹配,并且返回值始终相同,尽管输入值不同
- 与'operator='不匹配(操作数类型'String'且"void")
- C++模板/别名 - 模板参数列表中参数 1 处的类型/值不匹配
- C4018:类内有符号、无符号不匹配
- 我在 .h 中有一个枚举类,并且在.cpp错误中有一个运算符重载:与"运算符<<不匹配
- 为什么我收到错误:"运算符<<不匹配?
- RE2 不匹配非 ASCII 字符
- 函数签名与调用的函数不匹配,常量字符[]和字符*之间的区别?
- 模板推导:为什么函数指针模板定义在常量和/或引用时不匹配?
- 错误:"模板<类_Tp,类_Dp>类 std::unique_ptr"的模板参数列表中参数 1 的类型/值不匹配
- OpenSSL fips in C++ wrapper Library 如何?错误:指纹不匹配
- 为什么我的数组值与此处的全局变量不匹配?
- 引号之间匹配/不匹配,带有不可避免的引号和多行
- 映射迭代器与运算符不匹配
- C++调用和定义不匹配
- 模板专用化与派生类不匹配