I tried searching in google but it just shows what I'm not looking for.
I have this class called Student and in my main class I instantiated it to be a vector.
I tried adding this line in my main class
vector<Student> students;
students[0].setFirstName("Test");
and it throws an error on my Student class
void Student::setFirstName(string fname) { firstName = fname; }
It says that EXC_BAD_ACCESS. I'm using Xcode in Macintosh
EDIT: I want it to be dynamic that's why I di开发者_开发问答dn't specify the size.
As I'm sure you know, the expression students[0]
means that you are trying to access to first item in the vector
. But in order to access the first item, you must first add a first item.
Quite simply, add a call to vector::push_back
before trying to use anything in the vector. Alternatively, declare the vector by
vector<Student> students(/*number of default Students here*/);
There are also other ways, but just make sure you have what you're trying to use.
To be quite specific, the index you pass to the []
operation must satisfy the condition 0 <= index && index < students.size()
. In your case, students.size() == 0
, so 0 <= index && index < 0
, which is clearly not possible to satisfy.
When you create your vector, how many elements are in it? None. And yet you try to access an element right away. You need to put elements in it first. Either at initialization, like this:
vector<Student> students(10);
Or some other method, like push_back
, or resize
.
Your vector
is empty, yet you try to access its first element. Try putting something in the vector
before accessing its contents.
You are going out of range for your vector
size. You are trying to access an element which doesn't exist. You can declare its size at initialization.
vector<Student> students(SIZE);
As a side note, the setter
methods typically take const
reference:
void Student::setFirstName(const string &fname) { firstName = fname; }
精彩评论