2014-03-03 71 views
0

我想一個向量迭代器轉換爲對象的指針下面的函數對象:的std ::向量:如何返回指針向量C++

std::vector<some_object> some_objects; 

some_object* getsome(int index) 
{ 
    if(index < ledges.size() && index >= 0) 
    { 
     return &(*some_objects[index]); 
    } 
    return NULL; 
} 

但是編譯器會引發錯誤:「不匹配'operator *'。處理這個問題的正確方法是什麼?

+0

什麼是'some_objects'?你可能要麼'return&some_objects [index]'或'return some_objects [index]',這取決於some_objects是什麼。 –

+0

只需'返回&some_objects [index]',通常。 –

+2

處理此問題的正確方法是重新考慮您的設計。允許向量複製/刪除其成員,因此指向其成員之一的指針不保證保持有效。我的猜測是你有一些接受指針作爲參數的代碼,並且你想將它應用到一個向量的內容中;在這種情況下,您應該考慮哪些代碼擁有各種對象,哪些開發人員擁有各種代碼。 – Beta

回答

2

的問題是矢量持有some_object類型的對象,但不包含some_object *。你正試圖解引用一個非指針類型,編譯器正在抱怨它。嘗試 -

return &(some_objects[index]); 

return &(some_objects.at(index)); 
1

[]運營商的some_objects載體具有返回類型some_object&(參考),因此要獲得一個指向它,你只需要直接使用該&操作:

return &some_objects[index]; 
0
some_object* getsome(std::vector<some_object>::size_type index) 
{ 
    return (index < some_objects.size() ? &some_objects[index] : NULL); 
}