'sqrt': неоднозначный вызов перегруженной функции..\assimp\vector3.inl

Ошибка

ошибка C2668: "sqrt": неоднозначный вызов перегруженной функции c:\program files\assimp\include\assimp\vector3.inl

происходит, когда я включаю 'scene.h' в основной файл cpp:

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <GL/glew.h>
#include <GLFW/glfw3.h>
GLFWwindow* window;
#include <glm/glm.hpp>
#include <glm/gtx/transform.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include <assimp/Importer.hpp>
#include <assimp/scene.h>
#include <assimp/postprocess.h>
#define MESH_FILE "cube.obj"
using namespace glm;
#include "common/shader.hpp"
#include "common/controls.hpp"

Я не могу понять, с чем это конфликтует?

1 ответ

Решение

У вас есть директива using пространства имен в вашем файле.cpp:

using namespace glm;

Это означает, что все, что находится в glm пространство имен становится частью "глобального" пространства имен; так что вы загрязняете глобальное пространство имен.

Таким образом, может быть некоторая форма конфликта между стандартным C sqrt() функция (которая живет в глобальном пространстве имен) и ваш glm::sqrt(), который "продвигается" к глобальному sqrt,

Вы можете удалить вышеупомянутое пространство имен с помощью директивы using (и просто добавить glm:: префикс пространства имен, когда вы хотите сослаться на классы и функции в этом пространстве имен).

Другие вопросы по тегам