在包含类对象的C++中迭代映射



我正在C++创建一个映射,其中包含一个整数键,该值是类User的对象。我能够使用以下代码将对象插入地图 -

std::map<std::string,User>::iterator it = usermap.begin();
usermap.insert (it, std::pair<string,User>(object.userid,object));

我用来在.bin文件中写入对象的代码是 -

map<std::string, User>::iterator it;
for ( it = usermap.begin(); it != usermap.end(); it++ )
{
myfile2 << "Object:" << it->second << "n";
}

但是当我尝试运行代码时,我遇到的错误是 -

在/usr/include/c++/4.8.2/iostream:39:0 包含的文件中, 从a3part2_5.cpp:2:/usr/include/c++/4.8.2/ostream:548:5:注意:模板 std::basic_ostream& std::operator<<(std::basic_ostream&, const unsigned char*( operator<<(basic_ostream& __out, const unsigned char* __s( ^/usr/include/c++/4.8.2/ostream:548:5: 注意:模板参数推导/替换失败: a3part2_5.cpp:90:31:注意:无法将"it.std::_Rb_tree_iterator<_Tp>::operator->,User>>((->std::p air,User>:::second"(键入"User"(转换为键入"const unsigned char*" myfile2 <<"Obejct: " <<it->second <<"";

有什么解决方案可以解决错误吗?

我的用户类定义为 -

class User 
{ 
public: 
string userid; string uid; string gid; string gecos; string directory; string shell; 
User() {} 
};

User是用户定义的类,因此当您执行myfile2 << "Object:" << it->second << "n";ostream无法理解您的User对象

这应该有助于重载您自己的类的<<运算符。

所以你应该为你的班级重载operator <<

一个例子:

ostream& operator << (ostream &os, User const& u){
os << "userid:t" u.userid << "n";
// ...
return os;
}

最新更新