建議我使用指針添加一個我想從某個現有函數傳遞給另一個函數的向量。我真的被困在如何獲得信息回出雖然。我已經嘗試了很多我在這裏和那裏閱讀的內容,所以讓我演示一下我在說什麼。通過指針傳遞函數之間的向量
主要程序:
std::vector<float> * dvertex=NULL;
track.calculate(irrelevant stuff, dvertex)
二次程序(軌道計算)
track::caclulate(irrelevant stuff, vector<float> * dvertex)
{
...
vector<float> pos;
... pos filled after some calculations
if(! (dvertex==NULL))
{
dvertex = &pos1;
}
回主,除非我搞砸了的東西上面,這裏的一些事情,我已經試過
(*dvertex).at(0)
float z = (*dvertex).at(0)
(*dvertex)[0]
和一堆東西,只是普通沒有編譯。我很困難,因爲我不確定如何從主程序中獲取特定值。我甚至認爲它可能是if(!(dvertex == NULL))位,所以我將它改爲if(dvertex == NULL)但仍然沒有喜悅。任何幫助將不勝感激。
* 編輯/更新 *非常感謝所有人的幫助,但我擔心我仍然在做錯。
所以下面我只是傳遞一個參考的建議:我這樣做:
主要
std::vector<float> dvertex;
track.calculate(foo, &dvertex);
二次保持不變(與空檢查!)
主要
std::cout<<dvertex[0]<<std:endl;
(以及其他實際使用數據的嘗試)
非常感謝任何關於我仍然不正確行事的想法。所有東西都編譯完成後,程序在達到使用dvertex的數據時就凍結了。
編輯:最終修復
在二級程序,我需要
*dvertex = pos1;
,而不是
dvertex = &pos1;
不要在你投入更多的建議,但你應該把它作爲一個參考。那麼就沒有必要解除引用任何東西,並且獲得所有相同的好處。 – jonsca 2011-03-18 04:31:29
@jonsca是對的,你應該做一些像track :: caclulate(不相關的東西,矢量&dvertex),然後就像把dvertex當成一個普通向量一樣簡單,並且用它做的工作仍然可以在方法外部使用。 –
2011-03-18 04:35:46
有時我喜歡通過指針傳遞,如果容器將被修改。在通常需要使用地址運算符的調用地址:'func(&my_vertor);'這是一個小提醒,表明該函數實際上修改了容器。如果您始終按引用傳遞,則無需查看函數聲明即可區分修改和非修改調用。但是,這純粹是一種風格問題,沒有性能優勢。 – dappawit 2011-03-18 04:52:21