遍历存储Employee类的map时调用displayData报错的解决咨询
问题解决:遍历map调用Employee类方法报错
错误原因
(*it).first是map的键,类型为int,不存在displayData()方法,这是触发报错的核心原因。displayData()方法返回值为void,无法直接用cout <<输出——std::cout不支持处理void类型的输出操作。
修正后的代码
#include <iostream> #include <map> #include <string> // 原代码缺少<string>头文件,string类型必须显式包含以保证兼容性 using namespace std; class Employee { private: int id; string name; public : void getData(){ cin >> id >> name; } void displayData(){ cout << id << " " << name << endl; } }; int main() { map<int, Employee> m1; map<int, Employee> :: iterator it; Employee e1,e2; e1.getData(); m1[1] = e1; e2.getData(); m1[2] = e2; for (it = m1.begin(); it!=m1.end(); ++it){ cout << "员工编号:" << (*it).first << ",信息:"; (*it).second.displayData(); // 仅对map的value(Employee对象)调用displayData } return 0; }
关键说明
- map迭代器指向的是
pair<const int, Employee>结构,其中first是键(int类型),second是存储的Employee对象,只有second能调用Employee类的成员方法。 displayData()内部已经完成了cout输出逻辑,无需再用cout <<包裹调用。- 补充
<string>头文件,避免因编译器间接包含导致的兼容性问题。
内容的提问来源于stack exchange,提问作者Prathamesh Kulkarni
相关产品推荐
相关产品推荐

