使用全局变量作为在其他源文件中分配的函数的参数
Use global variables as parameters of a function allocated in other source file
我正在编写一个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
相关文章:
- 无法分配函数指针的 2D 数组
- Clang-Format 不能正确分配函数参数
- 我们可以在cpp中为对象分配函数吗
- 分段错误分配函数结果
- 在类内分配函数指针
- 创建一个移动分配函数,不断得到"pointer being freed was not allocated"
- 如何在C++中重新分配函数名称
- 尝试分配函数指针时获取"Void value not ignored as it ought to be"
- 尝试从文件中获取数据时,在C 中的分配函数中没有正确的字符串
- 当使用内存分配函数用作条件语句时会发生什么
- 解除分配函数的 A 函数 B 内的运行时内存
- 是否可以编写一个自定义 STL 分配器,该分配器使用指向用户提供的分配函数的指针
- 当分配函数指针时,这两种符号之间有什么区别
- 新的运算符分配函数顺序连续性和初始值
- 在类中分配函数指针会在C++中给出值类型错误
- 函数包装中的堆栈分配/函数中的alloca
- 创建线程,在循环中为其分配函数并执行
- 我想我可以理解 N5.3.4 中的 §4140/11,但已扩展的分配函数的概念对我来说是不可理解的
- 析构函数和解分配函数的区别是什么?
- 为什么分配函数使用std::nothrow_t作为引用而不是值