Возможный дубликат:
Перегрузка оператора C ++: нет известного преобразования объекта в ссылку?
я использую GLM lib (версия 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);
Почему вы не берете параметр по const&
вместо неконстантных &
? Это выглядит как ошибка, так как SetProjection
не является модифицирующий параметр.
Вот откуда исходит ошибка вашего компилятора. Возвращаемое значение perspective
является временным. И временный не может быть сохранен неконстантным &
,
Других решений пока нет …