开发者

Problem with passing vector of pointers to objects to member function of another object

开发者 https://www.devze.com 2022-12-26 18:38 出处:网络
I have a vector of pointers to Mouse objects called \'mice\'. I\'m passing the mice to the cat by reference.

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();
0

精彩评论

暂无评论...
验证码 换一张
取 消