C++ GLM数学库使用GCC编译错误
可能重复:C++ GLM数学库使用GCC编译错误,c++,opengl,gcc,glm-math,C++,Opengl,Gcc,Glm Math,可能重复: 我正在使用(版本0.9.4)作为OpenGL渲染器,现在我将其移植到Linux。我在使用MS VS2010进行编译时没有遇到任何问题。 现在,当我尝试在Linux上使用GCC(版本4.7.2)进行编译时,我遇到了一些与获取GLM矩阵作为输入的方法相关的奇怪错误 例如,以下是声明: void SetProjection(mat4 &matr); 定义是: void TransformState::SetProjection(mat4 &matr){
我正在使用(版本0.9.4)作为OpenGL渲染器,现在我将其移植到Linux。我在使用MS VS2010进行编译时没有遇到任何问题。 现在,当我尝试在Linux上使用GCC(版本4.7.2)进行编译时,我遇到了一些与获取GLM矩阵作为输入的方法相关的奇怪错误 例如,以下是声明:
void SetProjection(mat4 &matr);
定义是:
void TransformState::SetProjection(mat4 &matr){
_projection=matr;
}
在某些地方,我是这样使用它的:
_transform.SetProjection(perspective(_fov , _viewportW/(float)_viewportH,_nearPlane , _farPlane));
GCC编译器抛出以下命令:
。/../Documents/XXX/XXX/XXXengine/src/cameras/XXXX.cpp:120:104:错误:调用“ie_engine::TransformState::SetProjection(glm::detail::tmat4x4)”时没有匹配的函数
对于上述声明方法,我得到以下错误:
./../Documents/XXX/XXXX/XXXengine/include/TransformState.h:31:8:注意:参数1从'glm::detail::tmat4x4'到'glm::mat4&{aka glm::detail::tmat4x4&}'的转换未知。
有什么问题?据我所知,GLM确实与GCC合作
void SetProjection(mat4 &matr);
为什么不通过常量而不是非常量来获取参数?这看起来像是个错误,因为SetProjection
没有修改参数
这就是编译器错误的来源。透视图的返回值是临时值。非常量&
不能存储临时数据
为什么不通过常量而不是非常量来获取参数?这看起来像是个错误,因为SetProjection
没有修改参数
这就是编译器错误的来源。透视图的返回值是临时值。由于未知原因,非常量&
SetProjection
无法存储临时值,因此需要非常量引用。你是想给它一个暂时的机会。临时引用不能绑定到非常量引用。修正SetProjection
的签名,使其接受一个const mat4&
就像每个好的小函数一样。SetProjection
出于未知原因需要一个非const引用。你是想给它一个暂时的机会。临时引用不能绑定到非常量引用。修复SetProjection
的签名,使其接受const mat4&
就像每个好的小函数一样。你在这方面完全正确。它必须是const&但我真的很好奇为什么在VC++编译器上我没有收到任何抱怨。或者其他许多人,这是一种痛苦。@Marglisse哇!这是一个很好的发现:)很高兴知道,尤其是作为GCC noob。你在这方面完全正确。它必须是常量&但我真的很好奇为什么在VC++编译器上我没有收到任何抱怨。或者其他许多人,这是一种痛苦。@Marglisse哇!这是一个很好的发现:)很高兴知道,尤其是作为一个新手。