【发布时间】:2014-12-28 19:48:11
【问题描述】:
我正在尝试编译旧的 Qt 项目,但遇到了这个错误:
错误:无法将 'float*' 转换为 'qreal* {aka double*}' in 初始化
这是代码片段:
void Camera::loadProjectionMatrix()
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
qreal *dataMat = projectionMatrix_.data();
GLfloat matriceArray[16];
for (int i= 0; i < 16; ++i)
matriceArray[i] = dataMat[i];
glMultMatrixf(matriceArray);
}
我有什么办法可以克服这个错误?
【问题讨论】:
-
projectionMatrix_.data()的数据类型是什么?如果它是浮动的,那么只需使用浮动而不是 qreal。
-
@Archie it's
float* -
好吧,那就用 float :)
-
虽然
float可以隐式转换为double,但不能对float*执行相同的操作。指向一种类型的指针与指向另一种类型的指针非常不同,即使基类型在其他方面是兼容的。您的代码的问题是float通常是 32 位,而double是 64 位,从数组开头到除第一个(索引零处)以外的任何项目的偏移量与指向float的指针不匹配和指向double的指针。 -
@JoachimPileborg:是的,完全正确。