GlM (OpenGl Mathematics) 库停止M_PI和其他定义的常量工作

GlM (OpenGl Mathematics) Library stops M_PI and other defined constants from working

提问人:EdL 提问时间:7/27/2017 更新时间:7/27/2017 访问量:865

问:

我需要 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;
}
C++ Windows 未定义引用 glm-math

评论


答:

0赞 EdL 7/27/2017 #1

未定义M_PI符号是由于包含之前导致的glmcmath

#define _USE_MATH_DEFINES

如果将此 define 语句放在 glm include 之前,它将修复数学常量问题。

但是,由于 glm 库有自己的函数,因此它取消了定义它们。这可以在标题为“顾名思义”的文件中看到,该文件是他们构建库时问题的解决方法。maxmin"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;
}