2013-05-25 57 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文件中。

希望这会有所帮助。