我有一个指向鼠标对象的指针,称为“老鼠”。 我通过参考将小鼠传给了猫。
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
詹姆斯。
答案 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();