我正在尝试在此链接中运行此C ++代码: https://searchcode.com/codesearch/raw/108480099/ 我在这部分遇到错误:
void drawTriangle(Particle *p1, Particle *p2, Particle *p3, const Vec3 color)
{
glColor3fv( (GLfloat*) &color );
glNormal3fv((GLfloat *) &(p1->getNormal().normalized() )); //line 249
glVertex3fv((GLfloat *) &(p1->getPos() ));
glNormal3fv((GLfloat *) &(p2->getNormal().normalized() )); //line 252
glVertex3fv((GLfloat *) &(p2->getPos() ));
glNormal3fv((GLfloat *) &(p3->getNormal().normalized() )); //line 255
glVertex3fv((GLfloat *) &(p3->getPos() ));
}
错误:
249:58: error: taking address of temporary [-fpermissive]
glNormal3fv((GLfloat *) &(p1->getNormal().normalized() ));
252:58: error: taking address of temporary [-fpermissive]
glNormal3fv((GLfloat *) &(p2->getNormal().normalized() ));
255:58: error: taking address of temporary [-fpermissive]
glNormal3fv((GLfloat *) &(p3->getNormal().normalized() ));
实际问了这个问题here:
如果将其存储在变量中
auto instance = p1->getNormal().normalized();
您可以使用instance
的地址。
对不起,我不明白答案。如何申请?
我是C ++的新手,希望能够运行模拟。 如果我以错误的方式提问,我道歉。
答案 0 :(得分:0)
错误说明了一切:
错误:获取临时
的地址
您不应该获取函数返回的临时对象的地址。
GLfloat localObj = p1->getNormal().normalized();
glNormal3fv((GLfloat *) &(localObj)); //line 249
解决方案是在函数中定义一个新对象,并为其分配/复制临时对象。新对象是本地对象,并且在函数范围内保持有效。
这将正常工作,因为函数glNormal3fv
不期望传递的数组应该永远存在。