'sqrt':对重载函数的不明确调用。\assimp\vector3.inl

'sqrt' : ambiguous call to overloaded function ..assimpvector3.inl

本文关键字:vector3 inl 调用 assimp 函数 sqrt 重载 不明确      更新时间:2023-10-16

错误

错误C2668:"sqrt":对重载函数c:\program files\assimp\enclude\assimp\vector3.inl 的调用不明确

当我在主cpp文件中包含"scene.h"时发生:

#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"

我不明白这和什么冲突?

您在.cpp文件中有一个使用指令的命名空间:

using namespace glm;

这意味着glm命名空间中的所有内容都成为"全局"命名空间的一部分;因此,污染了全局命名空间。

因此,标准的C sqrt()函数(位于全局命名空间中(和您的glm::sqrt()(被"提升"为全局sqrt(之间可能存在某种形式的冲突。

您可能希望删除前面提到的命名空间using指令(当您希望引用该命名空间中的类和函数时,只需添加glm::命名空间前缀(。