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

时间:2013-12-01 17:33:20

标签: c++ arrays global-variables

我正在编写一个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,但是一旦处理完文件,就更愿意使用数组。

2 个答案:

答案 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>代替vertexContainervertexn,并将数据直接写入vertexContainer