我正在编写一个openGL程序,该程序从文本文件中读取点和面,然后将它们显示在屏幕上。
我在main.cpp中处理opengl事务,并在LoadFile.cpp中加载该文件。
总的来说,我有一个数组,其中包含要显示的点:
Point3f* vertexContainer;
int vertexn;
我已经声明了要用来加载源文件的函数:
extern void loadFile(const char*,Point3f*, int, Face*, int);
请注意,extern在这里不是强制性的。暂时不要在意脸
LoadFile.cpp内部:
void loadFile(const char* path, Point3f* vertexContainer, int nvertex,
Face* faceContainer, int nfaces)
{
//reading and processing source file,
//storing the input vertices in: std::vector<Point3f> verticesVector.
//Finally:
vertexContainer = &verticesVector[0];
vertexn = verticesVector.size();
}
屏幕上什么也不显示。此外,如果我调试vertexContainer,我会意识到它的值永远不会改变。
但是,如果我调试本地变量vc,我可以看到更改:
Point3f* vc = &verticesVector[0];
我注意到,如果我通过引用传递数组,它会发生变化,但是,神秘的是,当程序控件返回main时,它的值发生了错误的变化
我曾认为数组永远不必通过引用传递。
另一种方法是将向量本身返回到main,但更喜欢在处理文件后使用数组。
声明
extern void loadFile(const char*,Point3f*&, int, Face*, int);
与的定义不兼容
void loadFile(const char*路径,Point3f*vertexContainer,int nvertex,Face*faceContainer,int nfaces){
和
vertexContainer = &verticesVector[0];
vertexn = &verticesVector.size();
更新调用方作为参数放入的函数副本
此外,&verticesVector[0]
将在loadFile
的作用域端随着verticesVector
的销毁而销毁。
verticesVector
将在作用域loadFile
结束时销毁
您可以尝试使用vector<PointF>
而不是vertexContainer
和vertexn
,并将数据直接写入vertexContainer