使用全局变量作为在其他源文件中分配的函数的参数

Use global variables as parameters of a function allocated in other source file

本文关键字:分配 函数 参数 源文件 其他 全局变量      更新时间:2023-10-16

我正在编写一个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>而不是vertexContainervertexn,并将数据直接写入vertexContainer