c - 问:从“struct __mpz_struct *”类型分配为“mpz_t”类型时是否存在不兼容的类型?

标签 c gnu gmp

我正在尝试学习如何在c中使用GNU GMP库,我编写了该程序来查看mpz_t mpq_numref( mpq_t N)mpz_t mpq_denref( mpq_t N)的工作方式。我收到一个错误,并且真的不知道如何修改代码才能使其正常工作。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <gmp.h>

int main()
{ 

  mpq_t u, v;
  mpz_t a,b,c;
  mpz_init(a);
  mpz_init(b);

  mpq_init( u );
  mpq_init( v );

  mpq_set_si( u, -6 ,2);
  mpq_canonicalize( u );
  a= mpq_numref( u );
  b= mpq_denref( u );
  gmp_printf( "u =%Zd/%Zd\n", a,b );

  return 0;
}


我得到的错误是:

error: incompatible types when assigning to type ‘mpz_t’ from type ‘struct __mpz_struct *’
       a= mpq_numref( u );
        ^
7.c:21:8: error: incompatible types when assigning to type ‘mpz_t’ from type ‘struct __mpz_struct *’
       b= mpq_denref( u );
        ^


非常感谢您的帮助

最佳答案

仔细阅读错误消息将为您提供答案。 mpq_numrefmpq_denref函数都返回指向__mpz_struct类型-> struct __mpz_struct *的指针。

注意函数和数据类型的类型签名,在类型T和其对应的指针类型T *之间不可能进行隐式转换。

关于c - 问:从“struct __mpz_struct *”类型分配为“mpz_t”类型时是否存在不兼容的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33791162/

相关文章:

c++ - c tcp套接字非阻塞接收超时

macos - sed -i 命令用于就地编辑,可与 GNU sed 和 BSD/OSX 一起使用

ubuntu - 从源代码编译 cpabe 包时链接 gmp 时出错

c - 结构中的动态字符串

java - 垃圾收集与非垃圾收集编程语言

linux - 在哪里可以找到 GNU ar 文件格式规范?

c++ - 将 mpz_t 转换为二进制表示

在 C 中将字符串转换为 mpz_t

c - 在 while 循环中使用 "continue",跳过 scanf ("%d",var)

function - GNU make 通配符函数找不到运行时生成的文件