可能重复:
C++ operator overloading: no known conversion from object to reference?
我正在使用GLM lib(版本0.9.4)用于OpenGL渲染器,我现在将其移植到Linux.I与MS VS2010的编译没有任何问题。 现在,当尝试使用GCC(版本4.7.2)在Linux上进行编译时,我有一些与将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)的匹配函数::详细:: tmat4x4)'
对于上面提到的声明方法,我收到此错误:
../../ Documents / XXX / XXXX / XXXengine / include / TransformState.h:31:8:注意:参数1从'glm :: detail :: tmat4x4'到'的转换没有已知GLM :: MAT4&安培; {aka glm :: detail :: tmat4x4&}'
有什么问题?据我所知,GLM确实与GCC合作。
答案 0 :(得分:1)
void SetProjection(mat4 &matr);
为什么不通过const&
而不是非const &
来获取参数?这似乎是一个错误,因为SetProjection
不是修改参数。
这就是编译器错误的来源。 perspective
的返回值是暂时的。暂时不能由非const &
存储。