我试图在C ++中使用boost multiprecision库,但我遇到了gmp_int类型的问题。我获取boost库的全部目的是使用任意大整数进行算术运算,所以我做了以下代码,看看是否一切正常:
#include <iostream>
#include <boost/multiprecision/gmp.hpp>
using namespace std;
namespace mp=boost::multiprecision;
int main()
{
mp::gmp_int n;
cin>>n; //Here's the
n=n*2 //problem (at least according to Xcode 5).
cout<<n<<"\n";
return 0;
}
但它投掷了无效的操作数&#34;上面标记的行中的错误。如果有人能找到解决方案 - 更重要的是 - 首先解释出了什么问题,我们将非常感激。
[编辑]
谢谢的回答似乎已经解决了第一个问题,并创造了一个新问题。现在我得到了这个:架构x86_64的未定义符号: &#34; ___ gmp_get_memory_functions&#34;,引自: main.o中的boost :: multiprecision :: backends :: gmp_int :: str(long,unsigned int)const &#34; ___ gmpz_clear&#34;,引自: main.o中的boost :: multiprecision :: backends :: gmp_int :: ~gmp_int() &#34; ___ gmpz_get_str&#34;,引自: main.o中的boost :: multiprecision :: backends :: gmp_int :: str(long,unsigned int)const &#34; ___ gmpz_init&#34;,引自: main.o中的boost :: multiprecision :: backends :: gmp_int :: operator =(char const *) main.o中的boost :: multiprecision :: backends :: gmp_int :: gmp_int() &#34; ___ gmpz_mul_ui&#34;,引自: 在main.o中的boost :: multiprecision :: backends :: eval_multiply(boost :: multiprecision :: backends :: gmp_int&amp;,boost :: multiprecision :: backends :: gmp_int const&amp;,long) &#34; ___ gmpz_neg&#34;,引自: 在main.o中的boost :: multiprecision :: backends :: eval_multiply(boost :: multiprecision :: backends :: gmp_int&amp;,boost :: multiprecision :: backends :: gmp_int const&amp;,long) &#34; ___ gmpz_set_str&#34;,引自: main.o中的boost :: multiprecision :: backends :: gmp_int :: operator =(char const *) &#34; ___ gmpz_set_ui&#34;,引自: main.o中的boost :: multiprecision :: backends :: gmp_int :: operator =(char const *) ld:找不到架构x86_64的符号 clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)
[/编辑]
答案 0 :(得分:1)
gmp_int
是后端类型。
使用number<gmp_int>
将其调整为通用算术类型。在这种情况下,mpz_int
已经是那种类型:
<强> Live On Coliru 强>
#include <boost/multiprecision/gmp.hpp>
#include <iostream>
namespace mp = boost::multiprecision;
int main() {
mp::mpz_int n;
std::cin >> n;
n = n*2;
std::cout << n << "\n";
}