2017-07-18 68 views
0

我在C++中創建一個包含整型鍵的映射,並且該值是類User的對象。我能夠將對象插入下面的代碼地圖 -在包含類對象的C++中迭代映射

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:note:template std :: basic_ost令&的std ::操作< <(STD :: basic_ostream &,const的無符號字符*) 操作< <(basic_ostream & __out,const的無符號字符* __s) ^ /usr/include/c++/4.8.2/ostream :548:5:note:template argument deduction/substitution failed: a3part2_5.cpp:90:31:note:can not convert'it.std :: _ Rb_tree_iterator < _Tp> :: operator->,User>>() - > std :: pair,User> :: second'(type'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() {} 
}; 
+0

貴'User'類有一個重載的'操作符<<'您試圖打電話? – VTT

+0

我很確定它不是。 –

回答

4

User是用戶定義的類,當你做myfile2 << "Object:" << it->second << "\n";

因此ostream無法理解你的User對象這將有助於Overloading the << Operator for Your Own Classes.

所以你應該爲你的課程重載operator <<

+0

我試着看着你說的話,並在我的用戶類中添加了下面的代碼 - friend std :: ostream&operator <<(std :: ostream&stream,const用戶和用戶) {<<; return stream; } 現在,我正在嘗試運行代碼時出現總線錯誤。 –

+1

'ostream'作爲一個整體無法理解'user'對象。它理解像char,int,float和一些用戶定義類型(比如'string')的基本類型,它的重載。在函數中接收到'user'後,你應該執行'stream << user.userid <<「,」<< user.uid;'等等。 – sameerkn

+0

它工作。感謝您的解釋。 –

1

一個例子:

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