我有一个函数来绘制eclipse:
void drawEclipse(GLfloat x, GLfloat y, GLfloat xrad,GLfloat yrad)
当我调用glutDisplayFunc(drawEclipse(10,10,3,3));
时
编译错误:
error: invalid use of void expression
如何将参数传递给glutDisplayFunc
内部的函数?
这个eclipse绘图函数是动态调用的,只需单击鼠标。
我的更新代码:
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,y,3,3); };
glutDisplayFunc(display);
}
}
...
int main(){
...
glutMouseFunc(mouseClicks);
...
1条答案
按热度按时间2cmtqfgy1#
我将引用Passing capturing lambda as function pointer的答案:
lambda只能转换为函数指针**,如果它不捕获**,从draft C++11 standard节5.1.2 [...]
你必须选择
glutDisplayFunc
的参数是一个函数指针。你必须实现一个函数来绘制椭圆,并将函数指针传递给glutDisplayFunc
:glutDisplayFunc(drawEclipse(10,10,3,3));
或者,您可以使用Lambda expression,而不使用任何捕获参数: