У меня проблемы с этот пакет произвольной точности.
Я включил «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, но, глядя на ссылку, поставляемую с пакетом, это не должно быть проблемой, по крайней мере, с точки зрения синтаксиса.
Кто-нибудь здесь знает этот пакет? Может быть, есть какой-то опыт с той же проблемой?
РЕДАКТИРОВАТЬ: похоже, что пакет отлично работает в Visual Studio. Не могу понять, как заставить его работать в C: B, хотя …
Хорошо, так … У меня была та же проблема при попытке подключить эту библиотеку к CodeBlocks под GCC.
Мне кажется, что * int_precision (float_precision&) Конструктор * нигде не объявлен в классе * int_precision *, и именно по этой причине вы получаете эту ошибку. Так что я понятия не имею, как это может работать в Visual Studio.
В любом случае, я решил добавить этот конструктор сам:
в iprecision.h файл внутри * int_precision * class рядом с другими объявлениями конструктора add:
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.h а также fprecision.h заголовки. Вот почему реализация должна быть в файле .cpp.
Надеюсь это поможет.
Других решений пока нет …