2013-05-25 1 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. Я понимаю, что float явно вставляется в int, но, глядя на ссылку, прилагаемую к пакету, это не должно быть проблемой, по крайней мере, не синтаксически.

Кто-нибудь здесь знает этот пакет? Может быть, любой опыт с той же проблемой?

EDIT: Похоже, пакет отлично работает в Visual Studio. Не могу понять, как заставить его работать в C: B, хотя ...

+0

Отключите «предварительно скомпилированные заголовки» для данного файла. –

+0

Как я могу это сделать с помощью Codeblocks? –

ответ

0

ok so ... У меня была такая же проблема, пытаясь подключить эту библиотеку к CodeBlocks под 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.h и fprecision.h заголовки. Вот почему реализация должна быть в .cpp-файле.

Надеюсь, это поможет.

Смежные вопросы