2015-06-28 31 views
1

我在新的C++項目,Button1和Button1代碼中使用了一些trig函數。 Form1.h文件旁邊的resource.h文件中也有#include <cmath>。 (下面是resource.h內容):VS2010 C++數學支持(找不到罪名)

//{{NO_DEPENDENCIES}} 
// Microsoft Visual C++ generated include file. 
// Used by app.rc 
#include <cmath> 

爲什麼代碼沒有看到三角函數?

Button1的代碼如下:

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { 

       double x[1000]; 
       double y[1000]; 
       double hifac; 
       double px[1000]; 
       double py[1000]; 
       int nout, jmax; 
       double prob; 
       int i,period; 
       period=300;         
       for (i=0; i<1000;i++){ 
        x[i]=i; 
        y[i]=sin(2 * 3.14 * i/period); 
       } 

      } 
+1

在.NET應用程序(如您的)中,使用['Math :: Sin'](https://msdn.microsoft.com/en-us/library/system.math.sin.aspx)。無論如何,如果你在文件A中包含#include ',爲什麼你期望它能夠幫助文件B中的代碼呢? –

+2

您是否嘗試過使用命名空間前綴 - std :: sin()? –

+0

謝謝 - 我添加#包括到該特定的文件,它的工作原理。 – wrtsvkrfm

回答

3

只要把它適當的地方適當的代碼。該#include不屬於resource.h,該頭文件應嚴格保留用於非託管資源的資源標識符定義。幾乎任何地方都是合適的,明顯的選擇是代碼出現的源文件和stdafx.h預編譯頭文件。

並使用適當的數學函數。它是std::sin(),缺少的命名空間名稱肯定是爲什麼您會收到編譯器投訴。但是從託管代碼調用該函數效率不高,需要額外的工作才能從託管代碼運行本地代碼。這不是多餘的工作,但這是不必要的工作。改用Math::Sin()