2016-01-04 71 views
-5

我收到的,因爲下面的代碼中的錯誤:功能 'deg2rad' 無法解析

const double angle = deg2rad(180); 

錯誤說:

Function 'deg2rad' could not be resolved 

我最近安裝了「對C Eclipse的IDE/C++開發人員「,我在C/C++的其他標誌添加了-std = C++ 11任何想法可能是錯誤的?

+0

我是新的堆棧溢出。我不明白爲什麼我的問題得到5分降低?我想知道發生了什麼問題 – ga97rasl

回答

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; 
} 
+0

我的道歉,我不知道在C++ 11標準中沒有deg2rad()。該解決方案完全爲我工作。謝謝 – ga97rasl

4

C++標準庫不包含deg2rad函數。你需要創建自己的,或者包含一個庫。這種函數的一個例子是:

#include <cmath> 

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

注意M_PI實際上不是標準的一部分或者,但通常包括在cmath頭。如果您使用的是Visual C++,則需要定義_USE_MATH_DEFINES才能啓用它。

+0

如果未定義'M_PI',另一種方法是使用基本方法計算它,例如'4.0 * atan(1.0)'或'atan2(0.0,-1.0)'。如果經常需要該值,則計算一次,並將其存儲在一個變量中供以後使用。 – Peter

+0

@Peter如果'M_PI'沒有被定義我會建議找到一個新的編譯器......因爲在那時你可能比缺少常量更大的問題。 – Mgetz

+0

謝謝。 M_PI沒有定義,因此我使用了你建議的基本方法。 – ga97rasl

1

C++沒有實現deg2rad函數,所以你需要自己編寫它。

inline double deg2rad(double deg) 
{ 
    return deg * M_PI/180.; 
} 

注意我們是如何定義函數的inline:這是因爲我們不想浪費額外的彙編指令建立呼叫棧和跳躍的函數的地址。當函數被內聯時,它被替換到它被調用的地方。請注意,inline只是對編譯器的建議,並且可以自由忽略它。

+0

爲什麼downvote? – stackptr

相關問題