Проблемы с использованием мультипрецизионной библиотеки boost

Я пытаюсь написать базовую программу преобразования, которая будет работать для чисел, выходящих за пределы длинных целых чисел 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 установлен правильно.

2

Решение

Похоже, вы скопировали неправильные биты из документации: 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;
}
2

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

Вы объявляете новый тип class gmp_int;, Я не могу понять причину, почему вы хотели бы сделать это.

Однако это означает, что следующая строка

typedef number<gmp_int >         mpz_int;

сейчас не может решить, имеете ли вы ввиду свой новый тип ::gmp_int или повышает версию ::boost::multiprecision::gmp_int,

Ваш компилятор C ++ пытается сказать вам, что он не может решить, какой gmp_int подразумевается с его сообщением «ссылка на»gmp_int«неоднозначно».

2

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