我正在写一个简单的代码,我已经从类Employee创建了两个对象,它们有两个方法:getData()和displayData(),我还做了一个Employee类型的Map,它接受输入,但通过调用类中的displayData()来迭代Map。
下面是代码。我得到了错误的错误:“struct std::pair〈const int,Employee〉"没有名为”displayData“的成员
有什么建议还是我做错了。
#include <iostream>
#include <map>
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;
//for (i)
e1.getData();
m1[1] = e1;
e2.getData();
m1[2] = e2;
for (it = m1.begin(); it!=m1.end(); ++it){
cout << (*it).first.displayData() << (*it).second.displayData() <<endl;
}
return 0;
}
先谢谢你的帮助
2条答案
按热度按时间7d7tgy0s1#
下面是代码。我得到了错误的错误:"struct std::pair〈const int,Employee〉"没有名为"displayData"的成员
编译器会告诉你错误的地方,你可能对std::maps有误解,std::maps包含一个键值对(More details About Maps),它是一个可以通过
iterator
访问的std::pair
,或者是一个可以直接通过map[key]
访问的值。iterator::first
包含的键在你的代码中是一个int
,而iterator::second
包含的值在你现在的情况下是一个名为Employee
的对象,因此(*it).first.displayData()
错误。此行也不正确,会产生编译器错误。
(*it).second.displayData
()将返回函数的返回类型,因为这是一个函数调用,在本例中是一个类型void。您可以简单地像这样调用函数以在每次迭代中获得所需的结果。x4shl7ld2#
在C++ 17中,你可以使用结构化绑定来提高可读性: