将指向对象的指针传递给另一个对象的成员函数的问题

时间:2010-04-15 13:42:26

标签: c++

我有一个指向鼠标对象的指针,称为“老鼠”。 我通过参考将小鼠传给了猫。

vector <Mouse*> mice;
Cat * c;

c->lookForMouse(&mice);

这是我的lookForMouse()成员函数

void Cat::lookForMouse(vector <Mouse*> *mice)
{
  ...
}

现在到了问题!在上面的函数中,我似乎无法访问我的鼠标。以下内容不起作用

mice[i]->isActive();

我收到的错误消息建议使用mouse [i] .isActive(),但这会抛出一个错误,说isActive()不是std :: vector&lt; _Ty&gt;的成员。 ...

这虽然有效......

vector <Mouse*> miceCopy = *mice;
miceCopy[i]->isActive();

据我所知,我不应该在这里创建另一个老鼠载体,它通过引用打败它的全部意义(让我知道我是不是错了)......

为什么我不能做老鼠[i] - &gt; isActive()我该怎么办?

感谢您的时间和帮助:D

詹姆斯。

3 个答案:

答案 0 :(得分:4)

问题是您 传递引用,而是指针
引用将像对象一样传递:

c->lookForMouse(mice);

并且它的功能看起来像这样:

void Cat::lookForMouse(vector <Mouse*> &mice)

请注意,哑指针的容器容易泄漏。例如:

void f()
{
   std::vector<Mouse*> mice = g();
   h(); // throws!

   cleanup(mice); // deletes objects in vector, is never called if h() throws
}

答案 1 :(得分:2)

mice[i]将索引指向矢量。要从向量中获取项目,您需要首先取消引用指向它的指针,所以:

(*mice)[i]->isActive()

或许更好,将矢量作为参考传递而不是指针。

答案 2 :(得分:0)

(*mice)[i]->isActive();