【问题标题】:Conflicting types error and invalid type argument of unary * have int一元 * 的冲突类型错误和无效类型参数具有 int
【发布时间】:2016-08-06 19:52:38
【问题描述】:

我这里有一个非常简单的程序,我得到如下错误:

conflicting type of 'f' 

previous declaration of 'f' was here

error : initializer element is not computable at load time 

in function queue_ready: 

invalid type argument of unary '*' (have'int') 

in function dequeue_ready : 

invalid type argument of unary '*' (have'int') 

我的错误在哪里?

#include<stdio.h> 

int Queue_ready[1000]; 
int *r ;
int *f ; 
r=&Queue_ready[0];
f=&Queue_ready[0];

void queue_ready (int process) 
{
   *r=process; 
    r = r+1;
} 

void dequeue_ready (void) 
{
   *f = 10000; 
   f=f+1;
}

int main() 
{
   queue_ready(1); 
   queue_ready(2);
   printf("%d %d" , Queue_ready[0] ,Queue_ready[1]); 
   dequeue_ready();
   dequeue_ready();
   return 0;  
} 

【问题讨论】:

    标签: c++ c


    【解决方案1】:

    问题出在这里:

    int *r;
    int *f; 
    r=&Queue_ready[0];
    f=&Queue_ready[0];
    

    这些行位于函数之外。前两个是可以的,因为它们声明变量,但接下来的两个不是,因为它们是语句,并且语句不允许在函数之外。

    您收到“冲突类型”错误的原因是,语句(编译器不期望)被读取为声明。由于此“声明”没有指定类型,因此它具有 int 的隐含类型,这与 int * 类型的先前定义相冲突。

    因为你真正想做的是初始化这些变量(而不是赋值),你在声明它们的时候就这样做了:

    int *r = &Queue_ready[0];
    int *f = &Queue_ready[0];
    

    【讨论】:

    • +1。这里的一般原则是在创建变量时对其进行初始化。我很惊讶初学者代码的数量与问题中的代码一样:定义一个变量,然后为其分配一个初始值。一步到位!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-18
    相关资源
    最近更新 更多