我正在编写一个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,但是一旦处理完文件,就更愿意使用数组。
答案 0 :(得分:0)
声明
extern void loadFile(const char*,Point3f*&, int, Face*, int);
与定义
不兼容void loadFile(const char * path,Point3f * vertexContainer,int nvertex, Face * faceContainer,int nfaces) {
和
vertexContainer = &verticesVector[0];
vertexn = &verticesVector.size();
更新函数的调用者作为参数放置的副本
同样,&verticesVector[0]
将在loadFile
的范围结束时销毁verticesVector
。
答案 1 :(得分:0)
verticesVector
将在范围loadFile
您可以尝试使用vector<PointF>
代替vertexContainer
和vertexn
,并将数据直接写入vertexContainer