【问题标题】:conflicting types for my function "inverse", which is designed to return long long type我的函数“inverse”的类型冲突,该函数旨在返回 long long 类型
【发布时间】:2015-05-22 11:47:09
【问题描述】:

我试图找出我在这里做错了什么,基本上这个函数是用于计算模块倒数到a-1 mod m。但是程序出错了。

有人能指出导致错误的原因吗?

//calculating the inverse of the public key, for getting private key d. long     
long long inverse(long long a, long long m) 
{ 
   long long p = a, q = m, t; 
   //Euclidean algorithm 
   long long x = 0, y = 1, z = (long long)q/p; 

   //start recursion 
   while(p != 1 && q != 1) 
   {
       t = p; 
       p = q % p; 
       q = t; 
       t = y; 
       y = x - y * z; 
       x = t; 
       z = (long long)q/p; 
   } 

   y = (long long)y % m; 
   if(y < 0) 
   { 
      y += m; 
   } 

   //return inverse number; 
   return y; 
}

【问题讨论】:

  • 您可能没有为inverse() 声明原型。在源文件顶部声明:long long inverse(long long, long long);
  • 请勿将代码作为图片发布! “得到错误”应该是什么意思?哪些错误?
  • 抱歉,确切的错误:'inverse' 的类型冲突
  • at long long ^ inverse(...)

标签: c function compiler-errors inverse modular


【解决方案1】:

这里的问题是以下之一:

  1. @iharob 先生在his answer 中正确提到了函数定义的不匹配前向声明。
  2. 根本没有向前声明。该函数已被使用(调用)之前它已被定义。因此,隐式声明(int 返回,接受任意数量的参数)与实际定义相冲突。

【讨论】:

    【解决方案2】:

    您声明了一个与函数定义不匹配的函数原型,如何做到这一点的示例,将以下内容放在文件顶部或头文件中

    int inverse(int a, int n);
    

    然后你的定义是

    long long inverse(long long a, long long n)
    {
    }
    

    【讨论】:

    • 是的,声明不正确,我要传递基数和模块号,返回 e^(-1) mod m
    • 那是一条错误消息,而不是警告,所以程序现在无法编译,我猜是某些数据类型错误导致此冲突类型返回,但无法弄清楚
    • @Seven 很抱歉我听不懂你说什么,你必须贴出重现问题的代码,而你贴出的代码不行。
    • 我正在链接我的答案和你的答案,希望你没问题。 :-)
    • @SouravGhosh 没关系,你不需要告诉我,我相信你的答案是正确的。
    猜你喜欢
    • 2014-08-10
    • 2015-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2017-04-18
    • 1970-01-01
    相关资源
    最近更新 更多