No match for 'operator[]

I have an assignment to create a grading system using multimap. It's not completed yet at the moment but whenever i try to compile it tells me "no match for 'operator[]' in lines 56,57,etc. I've scoured several help sites, and my textbook but i cant find any solutions. Can anyone help me? Thanks so much in advance!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include <iostream>
#include <string>
#include <map>
using namespace std;

class Student
{
public:
  //--- Constructor
  Student (int id = 0, double gpa = 0);
  //--- Output operator
  friend ostream & operator<<(ostream & out, const Student & s);
  //--- Input operator
  friend istream & operator>>(istream & in, Student & s);
  //--- Less-than operator
  friend bool operator<(const Student & a, const Student & b);
private:
  //--- Data members
  int myId;
  double myGPA;
};  // end of class Student

//--- Definition of constructor
inline Student::Student(int id, double gpa)
  : myId(id), myGPA(gpa)
{ }

//--- Definition of input operator
inline istream & operator>>(istream & in, Student & s)
{
  in >> s.myId >> s.myGPA;
  
}

//--- Definition of output operator
inline ostream & operator<<(ostream & out, const Student & s)
{ out << "id = " << s.myId << "  GPA = " << s.myGPA;
 return out;
}

//--- Definition of less-than operator
inline bool operator<(const Student & a, const Student & b)
{ return a.myId < b.myId; }
//================================================================

int main()
{
	//typedef multimap<string, Student>grades
  typedef multimap< string, Student, less<string> > grades1;
  typedef multimap< Student, string, less<Student> > grades2;

  grades1 a1;   // associative array of Student, index type is string
  grades2 a2;   // associative array of string, index type is Student

  Student s;
  s = Student(12345, 3.3);  a1["Fred"] = s;   a2[s] = "Fred";
  s = Student(32322, 3.9);  a1["Al"] = s;     a2[s] = "Al";
  s = Student(13131, 2.5);  a1["Joan"] = s;   a2[s] = "Joan";
  s = Student(22121, 4.0);  a1["Barb"] = s;   a2[s] = "Barb";
  s = Student(28888, 2.9);  a1["George"] = s; a2[s] = "George";
  s = Student(19981, 3.0);  a1["Dot"] = s;    a2[s] = "Dot";
  s = Student(20012, 2.9);  a1["Sue"] = s;    a2[s] = "Sue";
  string name;
  cout << "Enter a name: ";
  cin >> name;
  grades1::iterator it1 = a1.find(name);
  cout << name << " has ";
  if (it1 == a1.end())
    cout << "no info";
  else
    cout << a1[name];
  cout << endl;

  Student aStudent;
  cout << "Enter a Student's id and GPA: ";
  cin >> aStudent;
  grades2::iterator it2 = a2.find(aStudent);
  cout << "Student " << aStudent << " is ";

  if (it2 == a2.end())
    cout << "no info";
  else
    cout << a2[aStudent];
  cout << endl;

}
You have three statements on line 56. Two of them use operator[]. Which one causes the error?

Does the compiler tell the types that are involved in the statement?


Edit: std::multimap does not have such operator.
Last edited on
thanks for your reply, on line 56 a1["Fred"] = s; and a2[s] = "Fred"; cause errors.
So are you saying that multimap does not support [] at all?
Try and imagine what would happen, when there are several elements sharing the same key - which value should be returned?

I don't think multimap suits your problem - you need to be able to identify the students uniquely, or someone will get the wrong grade.
Topic archived. No new replies allowed.