2010-04-15 92 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(); 
相關問題