2013-05-25 60 views
0

我在this任意精度包中遇到問題。任意精度包

我列入「precisioncore.cpp」,宣佈爲int_precision,試圖編譯和它告訴我,stdafx.h中失蹤。

我已經讀過,我可以簡單地忽略這包括precisioncore.cpp,我也這樣做。之後,它抱怨memcpy沒有在此範圍內聲明,所以我介入了。

下一個錯誤,我不能糾正:

\ precisioncore.cpp | 4222 |錯誤:重載 'int_precision(float_precision &)' 的調用是曖昧|

這是線4222:R2 =(int_precision)RF; r2是一個int_precision,rf是一個float_precision。我明白浮點數被明確地轉換爲int類型,但是查看包附帶的引用不應該是一個問題,至少在語法上是不明智的。

有誰知道這裏這個包?同樣的問題的任何經驗,也許?

編輯:它看起來像包在Visual Studio中正常使用。想不出如何讓在C的工作:B,但...

+0

關閉此特定文件的「預編譯頭文件」。 –

+0

我會如何解決Codeblocks問題? –

回答

0

好了,所以...我試圖給圖書館掛鉤到代碼塊下GCC有同樣的問題。

在我看來,* int_precision(float_precision &)*構造函數沒有在* int_precision *類的任何地方聲明,這就是你得到這個錯誤的原因。所以我不知道它是如何在Visual Studio下工作的。

不管怎麼說,我的解決辦法是添加構造自己:

iprecision.h文件中* int_precision *類旁邊的其他構造函數聲明補充:

int_precision(const float_precision&); 

然後在某處precisioncore.cpp文件添加:

int_precision::int_precision(const float_precision& s) 
{//note that behavior is similar to int(double) cast 
//int(9.99) yields 9; and int(-0.9) yields 0; 
    if(s.exponent()<0) 
     mNumber = ito_precision_string(int(0), true); 
     //code taken from int_precision(int) constructor 
    else 
    { 
     mNumber=s.get_mantissa(); 
     if(mNumber[0]=='-'||mNumber[0]=='+') 
      mNumber.resize(s.exponent()+2);// +1.23456E2 = 123 
     else 
      mNumber.resize(s.exponent()+1);// 1.2345E2 = 123 
    } 
} 

不是e與其他構造函數不同,此函數不能內聯,因爲它會在之間創建一個循環標頭引用,其中包括iprecision.hfprecision.h標頭。這就是爲什麼實現必須在.cpp文件中。

希望這會有所幫助。