Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ GLM数学库使用GCC编译错误_C++_Opengl_Gcc_Glm Math - Fatal编程技术网

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哇!这是一个很好的发现:)很高兴知道,尤其是作为一个新手。