我在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&amp; std :: operator&lt;&lt;(std :: basic_ostream&amp;,const unsigned char *) operator&lt;&lt;(basic_ostream&amp; __out,const unsigned char * __s) ^ /usr/include/c++/4.8.2/ostream:548:5:注意:模板参数扣除/替换失败: a3part2_5.cpp:90:31:注意:无法转换'it.std :: _ Rb_tree_iterator&lt; _Tp&gt; :: operator-&gt ;,用户&gt; &gt;() - &gt; std :: pair,User&gt; :: second'(键入'User')输入'const unsigned char *' myfile2&lt;&lt; “Obejct:”&lt;&lt;它 - &gt;第二&lt;&lt; “\ n” 个
解决错误的任何解决方案?
我的用户类定义为 -
class User
{
public:
string userid; string uid; string gid; string gecos; string directory; string shell;
User() {}
};
答案 0 :(得分:4)
User
是用户定义的类,因此当ostream
User
无法理解您的myfile2 << "Object:" << it->second << "\n";
个对象
这应该有助于Overloading the << Operator for Your Own Classes.
所以你应该为你的班级重载operator <<
。
答案 1 :(得分:1)
一个例子:
ostream& operator << (ostream &os, User const& u){
os << "userid:\t" u.userid << "\n";
// ...
return os;
}