原来例子中的代码是这样的:
void CALLBACK vertexCallback(GLvoid *vertex)
{
const GLdouble *pointer;
glColor3dv(pointer+3);
glVertex3dv(vertex);/*这行出错*/
}
但在c++ 中运行会出错,错误代码为error C2664: 'glVertex3dv' : cannot convert parameter 1 from 'void *' to 'const double *'也就是说由glVertex3dv来看括号内的变量应为double类型,而vertex却是'void *类型,修改如下就可运行通过了:]
void CALLBACK vertexCallback(GLvoid *vertex)
{
const GLdouble *pointer;
pointer = (GLdouble *) vertex;
glColor3dv(pointer+3);
glVertex3dv((GLdouble *)vertex);
}
还有下面也有一个类似的错误情况:
本来代码是这样的:
tobj = gluNewTess();
gluTessCallback(tobj, GLU_TESS_VERTEX, glVertex3dv);
/*这行出错*/错误编码为
error C2664: 'gluTessCallback' : cannot convert parameter 3 from 'void (const double *)' to 'void (__stdcall *)(void)'其中const double *对应的为glVertex3dv,不能转化为(__stdcall *)(void)格式,那么
就强制转换了,给glVertex3dv加上((__stdcall *)(void))前缀即可:
gluTessCallback(tobj, GLU_TESS_VERTEX,
(void (__stdcall *)())glVertex3dv);
搞定了
摘自:http://hi.baidu.com/198572/blog/item/d2e08ccb5c6259fe52664f93.html