功能' deg2rad'无法解决

时间:2016-01-04 01:00:39

标签: c++

由于以下代码,我收到错误:

const double    angle = deg2rad(180);

错误说:

Function 'deg2rad' could not be resolved

我最近为C / C ++开发人员安装了Eclipse IDE'我已经在C / C ++ Build / Settings / Tool Settings / GCC C ++ Compiler / Miscellaneous中添加了-std = c ++ 11到其他标志

任何想法可能出错?

3 个答案:

答案 0 :(得分:4)

C ++标准库不包含deg2rad函数。您需要创建自己的,或包含一个库。这种功能的一个例子是:

#include <cmath>

double deg2rad(double deg) {
    return deg * M_PI / 180.0;
}

请注意,M_PI实际上不是标准的一部分,但通常包含在cmath标头中。如果您使用的是Visual C ++,则需要定义_USE_MATH_DEFINES以启用它。

答案 1 :(得分:1)

C ++ 11标准中没有deg2rad()所以,除非它是由其他库提供的,否则你必须自己编写。这样的事情应该作为一个开始:

double deg2rad (double degrees) {
    return degrees * 4.0 * atan (1.0) / 180.0;
}

根据上面的代码,我通常将微优化留给编译器,例如让它决定是否应该内联短函数,或者是否将表达式4.0 * atan (1.0) / 180.0常量折叠成一个常量

但是,在某些情况下(例如,如果编译器不像我使用的那样聪明)可能会出现明确添加优化的情况(请记住inline是对建议的建议。编译器而不是需求):

inline double deg2rad (double degrees) {
    static const double pi_on_180 = 4.0 * atan (1.0) / 180.0;
    return degrees * pi_on_180;
}

答案 2 :(得分:1)

C ++没有实现matplotlib函数,因此您需要自己编写。

deg2rad

注意我们如何声明函数inline double deg2rad(double deg) { return deg * M_PI / 180.; } :这是因为我们不想浪费额外的汇编指令来设置调用堆栈并跳转到函数的地址。当函数内联时,它将被替换为调用它的位置。请注意,inline只是对编译器的建议,可以忽略它。