Problem with passing vector of pointers to objects to member function of another object
I have a vector of pointers to Mouse objects called 'mice'. I'm passing the mice to the cat by reference.
vector <Mouse*> mice;
Cat * c;
c->lookForMouse(&mice);
And here's my lookForMouse() member function
void Cat::lookForMouse(vector <Mouse*> *mice)
{
...
}
And now to the problem! Within the function above, I can't seem to access my mice. This below will not work
mice[i]->isActive();
The error message I receive suggests to use mice[i].isActive(), but this throws an e开发者_JAVA百科rror saying isActive() is not a member of std::vector<_Ty> ...
This works though...
vector <Mouse*> miceCopy = *mice;
miceCopy[i]->isActive();
I understand that I shouldn't be creating another vector of mice here, it defeats the whole point of passing it by reference (let me know if I'm wrong)...
Why can't I do mice[i]->isActive() What should I be doing?
Thanks for your time and help :D
James.
The problem is that you are not passing a reference, but a pointer.
A reference would be passed like an object:
c->lookForMouse(mice);
and the function taking it would look like this:
void Cat::lookForMouse(vector <Mouse*> &mice)
Note that containers of dumb pointers are prone to leaking. For example:
void f()
{
std::vector<Mouse*> mice = g();
h(); // throws!
cleanup(mice); // deletes objects in vector, is never called if h() throws
}
mice[i]
will index the pointer to the vector. To get an item from the vector you need to first dereference the pointer to it, so do:
(*mice)[i]->isActive()
Or perhaps better, pass the vector as a reference instead of a pointer.
(*mice)[i]->isActive();
精彩评论