簡體   English   中英

使用Boost高精度庫時出現問題

[英]Problems using boost multiprecision library

我正在嘗試編寫一個基本的轉換程序,該程序將適用於超出C ++的長整型整數限制的數字。 我正在嘗試使用Boost高精度庫,但還沒有走得很遠。

我嘗試編譯以下內容:

#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'std :: cout << seed; ^產生5個錯誤。

我知道我一定犯了一些非常基本的錯誤,但是在修復錯誤方面沒有任何成功。 任何幫助,將不勝感激。

我有一個簡單的程序可以使用#include <boost/lambda/lambda.hpp> ,因此我可以肯定boost安裝正確。

您正在聲明一個新的類型class gmp_int; 我無法理解您為什么要這樣做。

但是,這意味着下一行

typedef number<gmp_int >         mpz_int;

現在無法確定您的意思是新類型::gmp_int還是Boosts版本::boost::multiprecision::gmp_int

您的C ++編譯器試圖告訴您它無法確定其消息“對' gmp_int的引用不明確”是指哪個gmp_int

似乎您從文檔中復制了錯誤的位: http : //www.boost.org/doc/libs/1_57_0/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/gmp_int.html

顯示的是參考摘要 ,而不是用法摘要 顯示的類型已經存在。

一個明顯的少則多:

生活在Coliru

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM