Пакет произвольной точности

У меня проблемы с этот пакет произвольной точности.

Я включил «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, хотя …

0

Решение

Хорошо, так … У меня была та же проблема при попытке подключить эту библиотеку к 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.

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]