在win xP SP2下使用QT中的gmp库的问题

时间:2011-01-12 11:23:44

标签: c++ qt gmp

我在Windows XP SP2下的Qt项目中使用GMP库时遇到问题。

当我运行我的Qt应用程序时,有时它可以工作,有时它不会。当应用程序崩溃时,它会显示一条警告,并显示消息“Microsoft Visual C ++运行时库运行时错误”或挂起几分钟。有时候它有效(并且没有错误)

以下是一些细节:

我使用的是QT ver 4.3.2(开源) 编译器:mingw32 ver:GNU Make 3.80           海湾合作委员会:3.4.5(mingw special)           G ++:3.4.5(mingw special) gmp 4.3.2 我的cpu类型:x86系列

我使用MSYS 1.0.11成功编译了GMP库:

  

./ configure --prefix = / gmp / install --enable-cxx

     

     

make install

以下是我的Qt pro.file内容:

..
..
INCLUDEPATH += C:/LIBGMP
LIBS += -LC:/LIBGMP -lgmpxx -lgmp

以下是我在Qt中使用GMP库的应用程序功能的一部分:

QString gmptambah(QString angka1 ,QString angka2,int angkapresisi) const
 {

  mpf_set_default_prec(angkapresisi); 

  mpf_t x,y,z;

  mpf_init (x); 
         mpf_init (y); 
         mpf_init (z);

        QByteArray encodedString1=angka1.toAscii ();
        const char *x1= encodedString1.constData ();

 QByteArray encodedString2=angka2.toAscii ();
        const char *y1= encodedString2.constData ();

  mpf_set_str (x,x1,10);

  mpf_set_str (y,y1,10);

  mpf_add (z,y,x);

  mp_exp_t exponent ;

  mpf_class nilaiz(z);
  nilaiz.set_prec(angkapresisi);

  QString hasil((nilaiz.get_str(exponent, 10, 0)).c_str()); // this is my problem

  long int exp=(exponent);

  if(exp>=0)
  {
   if(hasil.at(0)!='-' && exp==0)
   {
           hasil.insert(0,"0"); exp++;
   }
   else if(hasil.at(0)=='-' && exp==0)
   {
           hasil.insert(1,"0");

    exp=exp+2;
   }
   else if(hasil.at(0)=='-' && exp>=1)
   {           
    exp=exp+1;
   }

   hasil.insert(exp,".");

   hasil.replace(QString(" "), QString("0"));

   QStringList hasiltmp;

   hasiltmp=hasil.split(".");

   if(hasiltmp.size()==1) hasil.append("0");
   else if(hasiltmp.size()==2)
   {
           if(hasiltmp.at(1)=="")hasil.append("0");
   }

  }
  else
  {
          if(hasil.at(0)!='-') for(int i=0;i<qAbs(exp);i++)hasil.insert(0,"0");
   else for(int i=0;i<qAbs(exp);i++)hasil.insert(1,"0");

   if(hasil.at(0)!='-') hasil.insert(0,"0.");
   else hasil.insert(1,"0.");

  }

  mpf_clear (x);
         mpf_clear (y);
         mpf_clear (z);

  x1=0; y1=0;

  return pembulatan(hasil);

 }

在跟踪问题后,我发现我的问题位于nilaiz.get_str(exponent, 10, 0)函数,该函数调用mpf_get_str中的gmpxx.h函数

当我从我的应用程序中删除它时(不调用nilaiz.get_str(exponent, 10, 0)函数),应用程序运行良好而没有错误。

但我需要该功能将mpf_t z转换为QString(Qt中的字符串或char *)。

为什么会这样?接下来我该怎么办?或者我在编译GMP库时遗漏了什么,或者在配置GMP时是否应该添加xtra选项,或者使用该功能有错误?

我需要帮助或建议。谢谢!

祝你好运

aansd

0 个答案:

没有答案