2017-06-25 107 views
1

当前正在为学校做一个项目,我得到的任务是将C算法转换为C++(大约10小时前我开始学习C++,当我得到了任务)。从'long int'无效转换为'long int *'-fpermissive

做一个功能我得到的错误: [错误]无效的转换,从“长整型”到“长整型*” [-fpermissive]

我在这里打造了在testInstance功能

使用全局变量
static long *c;       // total capacity 

这是有错误的函数。

void testInstance (Exitem **f, Exitem **l, int n, int r, int type, int v){ 

     Exitem *a; 

     *f = a; 
     *l = &a[n-1]; 

     c = maketest(*f, *l, type, r, v); 

    } 

这是函数maketest(在给出错误的行上调用)。

long maketest (Exitem *F, Exitem *L, int type, int r, int v){ 

     register Exitem *J; 
     register long sum; 
     long c; 
     short r1; 

     sum = 0; 
     r1 = r/10; 

     for (J = F; J <= L; J++){ 
      J->w = (longRand() % (r)); 

      switch (type){ 
       case 1: 
        J->p = (longRand() % (r)) + 1; 
        break; 

       case 2: 
        J->p = (longRand() % (2*r1+1)) + J->w - r1; 
        if (J->p <= 0) 
         J->p = 1; 
        break; 

       case 3: 
        J->p = J->w + 10; 
        break; 

       case 4: 
        J->p = J->w; 
        break; 
      } 

      sum += J->w; 
     } 
     c = sum/2; 
     return c; 

    } 

我的问题是:我到底在做什么错了?我该如何解决这个问题?

+2

有趣的有趣的事实:'注册'不再真正做多了。如果编译器可以做得更好,它将完全忽略“register”。更多在这里:https://stackoverflow.com/questions/3207018/register-keyword-in-c – user4581301

+0

圣指针,蝙蝠侠! –

回答

2

maketest()的返回值很长。你把它写入c中,这是一个long类型的指针。

这是不匹配。

+0

它的工作,现在我有很多其他的错误,但我会尝试自己解决之前,问另一个问题。 –

1

您已经声明:

static long *c; 

但你的函数执行:

long maketest (Exitem *F, Exitem *L, int type, int r, int v) 
{ 
    ... 
    return c; 
} 

这将导致不匹配,因为返回类型为long,而c指针long

+0

虽然你发现了另一个错误,但会被警告'long int *'为'long int',不是吗?即另一种方式。 – Yunnosch

+0

@Yunnosch我看到你的答案,我们不是在说同样的事情吗? +1 – gsamaras

+0

我们都发现了问题 - 而且OP现在也意识到 - 也很感激。不好意思,但我认为你发现的问题并不是引起标题中提到的确切警告OP的问题。我期待你的下一个警告,或者之前的警告。 'long-> long *'不是'long * - > long'。 +1 – Yunnosch

相关问题