建议我使用指针添加一个我想从某个现有函数传递给另一个函数的向量。我真的被困在如何获得信息回出虽然。我已经尝试了很多我在这里和那里阅读的内容,所以让我演示一下我在说什么。通过指针传递函数之间的向量
主要程序:
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