You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

遍历存储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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 15:55:17