问题描述
void drawEclipse(GLfloat x,GLfloat y,GLfloat xrad,GLfloat yrad)
致电glutdisplayFunc(drawEclipse(10,10,3,3));
它具有编译错误:
error: invalid use of void expression
如何在glutdisplayFunc
内部传递参数以实现功能?
我更新的代码:
void mouseClicks(int button,int state,int x,int y) {
if(button == gluT_LEFT_BUTTON && state == gluT_DOWN) {
printf("%s -- %d -- %d\n","clicked",x,y);
//Way 1
glutdisplayFunc[&]() { drawEclipse(x,y,5,5); };
//Way 2
auto display = [x,y]() { return drawFilledelipse(x,3); };
glutdisplayFunc(display);
}
}
...
int main(){
...
glutMouseFunc(mouseClicks);
...
解决方法
我将引用Passing capturing lambda as function pointer的答案:
lambda只能从draft C++11 standard第5.1.2节[...]
转换为函数指针,如果不能捕获。
您必须选择
glutDisplayFunc
的参数是一个函数指针。
您必须实现一个绘制椭圆的函数,并将函数指针传递给glutDisplayFunc
:
void display()
{
drawEclipse(10,10,3,3);
// [...]
}
glutDisplayFunc(drawEclipse(10,3));
glutDisplayFunc(display);
或者,您可以使用Lambda expression而不使用任何捕获参数:
glutDisplayFunc([]()
{
drawEclipse(10,3);
// [...]
});