我正在使用 OpenGL 编写程序,但遇到了一个问题。我有一个名为“Quad”的类,导致问题的两个变量是公共地图和公共 Vector3(这是另一个类)。以下是 Quad.h 中定义的这两个变量:
std::map<unsigned int, Vector3*> vertexes;
Vector3* normal;
“正常”在 Quad 构造函数中启动(我认为是这个词),如下所示:
normal = new Vector3(0,0,0);
地图只是添加到这样的:
vertexes[0] = &vertex;
vertex
作为一个普通的 Vector3,并且地图接受指向 Vector3 的指针,所以我不得不像这样引用它。
我可以通过另一个函数打印出 Vector3 的正确值,但由于某种原因,我得到了一个分段错误:
void Quad::draw()
{
glNormal3f(normal->x, normal->y, normal->z);
for (std::map<unsigned int, Vector3*>::iterator i = this->vertexes.begin(); i != this->vertexes.end(); ++i) {
glVertex3f(i->second->x, i->second->y, i->second->z);
}
}
我知道这是由公共变量引起的,因为如果我注释掉方法的内容,就不会发生错误。cout << normal->x << endl;
也会导致故障,而cout << "Hello World!" << endl;
不会。但是这个函数和这个有什么区别?
void Quad::calculateNormal()
{
Vector3 tmp = *vertexes[0];
tmp = tmp.getFaceNormal(*vertexes[1], *vertexes[2]);
normal = &tmp;
std::cout << *normal << std::endl;
}
这是 normal 被重新定义和打印的地方。即使替换std::cout << *normal << std::endl;
为std::cout << normal->x << std::endl;
作品并为我提供正确的数据,但在其他功能中却没有?我只是不明白。我很确定这很愚蠢(我希望如此)。提前致谢。