提问人:EdL 提问时间:7/27/2017 更新时间:7/27/2017 访问量:865
GlM (OpenGl Mathematics) 库停止M_PI和其他定义的常量工作
GlM (OpenGl Mathematics) Library stops M_PI and other defined constants from working
问:
我需要 GLM 库进行矩阵计算。
在一个大型项目中,我在很多地方使用 M_PI 常数进行计算,我还使用 max 和 min 函数。 这些都来自 cmath 库。
#define _USE_MATH_DEFINES
#include <cmath>
一旦包含 GLM 库,max min 宏和常量(如 M_PI 将停止可用。
工程:
#include "stdafx.h" //standard stuff
#include "windows.h" //for max, min
#define _USE_MATH_DEFINES
#include <cmath> //for M_PI
#include <iostream> //for cin
int main()
{
printf("Pi is approximately: %.4f", M_PI);
printf("Biggest of 5.3 and 7.4 is :%.4f\n", max(5.3,7.4));
std::cin.get();
return 0;
}
不编译:
#include "stdafx.h" //standard stuff
#include "windows.h" //for max, min
#include <glm/glm.hpp>
#define _USE_MATH_DEFINES
#include <cmath> //for M_PI
#include <iostream> //for cin
int main()
{
printf("Pi is approximately: %.4f", M_PI);
printf("Biggest of 5.3 and 7.4 is :%.4f\n", max(5.3,7.4));
std::cin.get();
return 0;
}
答:
0赞
EdL
7/27/2017
#1
未定义M_PI符号是由于包含之前导致的glm
cmath
#define _USE_MATH_DEFINES
如果将此 define 语句放在 glm include 之前,它将修复数学常量问题。
但是,由于 glm 库有自己的函数,因此它取消了定义它们。这可以在标题为“顾名思义”的文件中看到,该文件是他们构建库时问题的解决方法。max
min
"windows.h"
<glm/detail/_fixes.hpp>
因此,解决方案是要么使用作用域中的函数。using namespace glm;
glm
所有这些修复组合在一起会导致
#include "stdafx.h"
#include "windows.h"
#define _USE_MATH_DEFINES
#include <glm/glm.hpp>
#include <cmath> //now redundant as glm includes it
#include <iostream>
using namespace std;
int main()
{
printf("Pi is approximately: %.4f\n", M_PI);
printf("Biggest of 5.3 and 7.4 is :%.4f\n", glm::max(5.3,7.4));
std::cin.get();
return 0;
}
评论