[英]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
顯示的是參考摘要 ,而不是用法摘要 。 顯示的類型已經存在。
一個明顯的少則多:
#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.