Я пытаюсь написать базовую программу преобразования, которая будет работать для чисел, выходящих за пределы длинных целых чисел C ++. Я пытаюсь использовать библиотеки мультипрецизионных улучшений, но пока не очень далеко.
Я попытался скомпилировать следующее:
#include <boost/multiprecision/gmp.hpp>
#include <iostream>
#include <string>
#include <stdio.h>
namespace boost{ namespace multiprecision{
class gmp_int;
typedef number<gmp_int > mpz_int;
}} // namespaces
using namespace boost::multiprecision;
int main(int argc, const char * argv[]) {
mpz_int seed = 18446744073709551615;
std::cout << seed;
return 0;
}
и получил следующие ошибки:
main.cpp:17:20: error: reference to 'gmp_int' is ambiguous
typedef number<gmp_int > mpz_int;
^main.cpp:15:11: note: candidate found by name lookup is
'boost::multiprecision::gmp_int'
class gmp_int;
^
/usr/local/boost_1_57_0/boost/multiprecision/gmp.hpp:2157:40: note: candidate
found by name lookup is 'boost::multiprecision::gmp_int'
using boost::multiprecision::backends::gmp_int;
^
main.cpp:17:20: error: reference to 'gmp_int' is ambiguous
typedef number<gmp_int > mpz_int;
^
main.cpp:15:11: note: candidate found by name lookup is
'boost::multiprecision::gmp_int'
class gmp_int;
^
/usr/local/boost_1_57_0/boost/multiprecision/gmp.hpp:2157:40: note: candidate
found by name lookup is 'boost::multiprecision::gmp_int'
using boost::multiprecision::backends::gmp_int;
^
main.cpp:17:38: error: typedef redefinition with different types ('number<class
boost::multiprecision::gmp_int>' vs 'number<struct
boost::multiprecision::backends::gmp_int>')
typedef number<gmp_int > mpz_int;
^
/usr/local/boost_1_57_0/boost/multiprecision/gmp.hpp:2214:34: note: previous
definition is here
typedef number<gmp_int > mpz_int;
^
main.cpp:22:2: error: reference to 'gmp_int' is ambiguous
gmp_int seed = 18446744073709551615;
^
/usr/local/boost_1_57_0/boost/multiprecision/gmp.hpp:2157:40: note: candidate
found by name lookup is 'boost::multiprecision::gmp_int'
using boost::multiprecision::backends::gmp_int;
^
main.cpp:15:11: note: candidate found by name lookup is
'boost::multiprecision::gmp_int'
class gmp_int;
^
main.cpp: 32: 18: ошибка: использование необъявленного идентификатора ‘seed’
станд :: соиЬ << семена;
^
5 сгенерированных ошибок.
Я знаю, что, должно быть, делаю довольно простые ошибки, но мне не удалось их исправить. любая помощь будет оценена.
У меня есть простая программа для работы с #include <boost/lambda/lambda.hpp>
, так что я уверен, что boost установлен правильно.
Похоже, вы скопировали неправильные биты из документации: http://www.boost.org/doc/libs/1_57_0/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/gmp_int.html
То, что показано краткое изложение, не краткий обзор использования. Типы показаны уже существовать.
Очевидный случай меньше — это больше:
#include <boost/multiprecision/mpfr.hpp>
#include <iostream>
int main() {
boost::multiprecision::mpz_int seed = 18446744073709551615ull;
std::cout << seed;
}
Вы объявляете новый тип class gmp_int;
, Я не могу понять причину, почему вы хотели бы сделать это.
Однако это означает, что следующая строка
typedef number<gmp_int > mpz_int;
сейчас не может решить, имеете ли вы ввиду свой новый тип ::gmp_int
или повышает версию ::boost::multiprecision::gmp_int
,
Ваш компилятор C ++ пытается сказать вам, что он не может решить, какой gmp_int
подразумевается с его сообщением «ссылка на»gmp_int
«неоднозначно».