2010-04-15 66 views
1

我有一个指向鼠标对象的向量称为'鼠标'的向量。 我通过引用将老鼠传给猫。将指向对象的指针向另一个对象的成员函数传递的问题

vector <Mouse*> mice; 
Cat * c; 

c->lookForMouse(&mice); 

这是我的lookForMouse()成员函数

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

而现在的问题!在上面的函数中,我似乎无法访问我的鼠标。此下面将不起作用

mice[i]->isActive(); 

我收到该错误信息显示使用小鼠[I] .isActive(),但是这会引发错误说isActive()不是STD的成员::矢量< _Ty> ...

这工作虽然...

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

我知道我不应该在这里创造小鼠的另一种载体,它违背了通过引用传递它的整点(让我知道如果我错了)...

为什么我不能做鼠标[i] - > isActive()我该怎么做?

感谢您的时间和帮助:D

James。

+0

从多个答案可以看出,这个问题的标题与指针向量无关,而是与处理指针引用无关。 – 2010-04-15 13:50:55

+0

哎呀......如果我能时光倒流, 如果我能找到一种方法, 我会拿回那些伤害你的话, 你会留下来, 如果我能到达星星, 我d给他们一切给你, 然后,你会爱我,爱我, 像你以前做的... – 2010-04-15 14:08:14

回答

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 
} 
+0

谢谢,这解决了我的!你能详细说明你的愚蠢指针容易发生泄漏的意思吗?我不明白。 – 2010-04-15 13:59:27

+0

如果抛出异常,指针矢量的析构函数只释放指针,而不是它们指向的东西。如果他们在堆上,你会泄漏所有指向的东西。另一方面,只要向量中的东西具有清理内存的析构函数(例如智能指针),那么你就很好。 – AshleysBrain 2010-04-15 14:06:44

+0

@Kamesz:我加了一个例子。 – sbi 2010-04-15 14:51:55

2

mice[i]将索引指针指向向量。若要从矢量获得一个项目,你需要先取消引用指针指向它,所以做:

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

或许更好,通过向量作为参考,而不是一个指针。

+0

这响铃。我试图这样做,但语法错了。 – 2010-04-15 14:00:39

0
(*mice)[i]->isActive(); 
相关问题