>这里是代码
class student
{
int num;
string name;
float marks;
public:
void add()
{
cout << "Enter the num name and marks:" << endl;
cin >> num >> name >> marks;
}
void display()
{
cout << num << endl;
cout << name << endl;
cout << marks << endl;
}
};
void main()
{
student ss;
multimap<int,student> st;
multimap<int,student>::iterator itr;
ss.add();
st.insert(make_pair(1000, ss));
for (itr = st.begin(); itr != st.end(); itr++)
{
cout << itr->second; // its showing ERROR
}
}
错误是错误 C2679 二进制"<<":未找到采用类型为"student"的右侧操作数的运算符(或没有可接受的转换)firstmultimap
如何解决这个问题
要显示学生对象,您需要重载运算符<<
。
我已经使运算符重载函数成为student
类的朋友,因此可以在不创建对象的情况下调用它。
另外,请在 MSDN 上查看此示例。
例:
#include<iostream>
#include<map>
#include<string>
using namespace std;
class student
{
private:
int num;
string name;
float marks;
public:
void add()
{
cout << "Enter the num name and marks:" << endl;
cin >> num >> name >> marks;
}
void display()
{
cout << num << endl;
cout << name << endl;
cout << marks << endl;
}
friend ostream &operator << (ostream &output, const student &s)
{
output << "Num: " << s.num << "nName: " << s.name << "nMarks: " << s.marks << endl;
return output;
}
};
int main()
{
student ss;
multimap<int, student> st;
multimap<int, student>::iterator itr;
ss.add();
st.insert(make_pair(1000, ss));
for (itr = st.begin(); itr != st.end(); itr++)
{
cout << itr->second;
}
// Using Range based for loop
// for(const auto &i : st)
// cout << i.second;
return 0;
}