使用boost multiprecision库的问题

时间:2015-04-08 20:37:16

标签: c++ boost gmp multiprecision

我正在尝试编写一个基本转换程序,该程序适用于超出C ++长整数限制的数字。我正在尝试使用boost multiprecision库,但还没有达到目的。

我试图编译以下内容:

#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:错误:使用未声明的标识符&#39;种子&#39;     std :: cout&lt;&lt;种子;                  ^      产生了5个错误。

我知道我必须犯一些非常基本的错误,但我没有成功修复它们。任何帮助将不胜感激。

我使用#include <boost/lambda/lambda.hpp>创建了一个简单的程序,所以我相当确定已正确安装了boost。

2 个答案:

答案 0 :(得分:2)

您正在宣布新类型class gmp_int;。我无法理解为什么你会这样做。

但是,这意味着下一行

typedef number<gmp_int >         mpz_int;

现在无法确定您的新类型::gmp_int还是Boosts版本::boost::multiprecision::gmp_int

您的C ++编译器试图告诉您,它无法确定哪条gmp_int与其消息有关&#34;引用&{39; gmp_int&#39;含糊不清&#34;。

答案 1 :(得分:2)

看起来您从文档中复制了错误的位:http://www.boost.org/doc/libs/1_57_0/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/gmp_int.html

显示的内容是参考摘要,而不是用法概要。显示的类型已经

更少的明显案例更多:

<强> Live On Coliru

#include <boost/multiprecision/mpfr.hpp>
#include <iostream>

int main() {
    boost::multiprecision::mpz_int seed = 18446744073709551615ull;
    std::cout << seed;
}