我正在用 C++ 创建一个映射,其中包含一个整数键,值是 User 类的一个对象。我可以使用以下代码将对象插入到 map 中 -
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*) 运算符<<(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::pair, User>::second'(类型 'User ') 输入'const unsigned char*' myfile2 << "Obejct: "<< it->second << "\n";
有解决错误的方法吗?
我的用户类定义为 -
class User
{
public:
string userid; string uid; string gid; string gecos; string directory; string shell;
User() {}
};
最佳答案
User
是用户定义的类,因此 ostream
无法理解你的User
当你做的时候对象 myfile2 << "Object:" << it->second << "\n";
这应该有帮助 Overloading the << Operator for Your Own Classes.
所以你应该重载operator <<
为你的类(class)。
关于c++ - 在 C++ 中迭代包含类对象的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45160361/