2016-05-06 7 views
2

ich hier sehr einfaches Programm haben, bekomme ich Fehler wie:Widersprüchliche Typen Fehler und ungültige Typargument von einstellige * haben int

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') 

Wo meine Fehler sind?

#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; 
} 

Antwort

10

Das Problem ist hier:

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

Diese Linien liegen außerhalb einer Funktion. Die ersten beiden sind in Ordnung, da sie deklarieren Variablen, aber die nächsten beiden sind nicht, da sie Anweisungen sind, und Aussagen sind außerhalb einer Funktion nicht erlaubt.

Der Grund, Sie bekommen eine „widersprüchliche Art“ Fehler ist, weil die Anweisung (dass der Compiler nicht erwartet) als Erklärung gelesen werden. Da diese "Deklaration" keinen Typ angibt, hat sie einen impliziten Typ von int, der mit der vorherigen Definition des Typs int * kollidiert.

Weil das, was Sie wirklich wollen, zu tun ist, initialisieren diese Variablen (wie zuweisen Gegensatz), tun Sie dies zum Zeitpunkt sie deklariert sind:

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

+1. Das allgemeine Prinzip hier ist ** initialisieren Variablen, wenn sie erstellt werden **. Ich bin erstaunt über die Menge an Anfänger-Code, der genau das tut, was der Code in der Frage tut: Definieren Sie eine Variable und weisen Sie ihr einen Anfangswert zu. Mach es in einem Schritt! –

Verwandte Themen