问:从类型'struct __mpz_struct *'中分配类型'mpz_t'时,不兼容的类型?

时间:2015-11-18 21:54:06

标签: 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 );
        ^

非常感谢您的帮助

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

感谢M.M的评论,代码应该如此修改,并且有效。

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    self.textView.setContentOffset(CGPoint.zero, animated: false)
}