0

我在使用这个任意精度包时遇到了问题。

我包含了“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 中工作,虽然......

4

1 回答 1

0

好的,所以...我在尝试将该库连接到 GCC 下的 CodeBlocks 时遇到了同样的问题。

在我看来, *int_precision(float_precision&)* 构造函数未在 *int_precision* 类中的任何地方声明,这就是您收到该错误的原因。所以我不知道它如何在 Visual Studio 下工作。

无论如何,我的解决方案是自己添加该构造函数:

在*int_precision* 类中的iprecision.h文件中,在其他构造函数声明旁边添加:

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
  }
}

请注意,与其他构造函数不同,此构造函数不能内联,因为它会在iprecision.hfprecision.h标头之间创建循环标头引用。这就是实现必须在 .cpp 文件中的原因。

希望这可以帮助。

于 2013-09-01T07:55:56.770 回答