2017-04-01 2 views
1

Ich habe ein Problem mit Xcode, das nur auf Xcode erscheint. Es erscheint nicht in VisualStudio und auch nicht beim Kompilieren über die Konsole (unter OS X).Fehler wie "Widersprüchliche Typen für 'move'" bei Verwendung von Xcode

folgende Fehler auftreten:

  1. Widersprüchliche Typen für 'move' (Linie 4)

  2. Implizite Deklaration der Funktion 'Bewegung' ist ungültig in C99 (Linie 20)

  3. Zu viele Argumente zum Funktionsaufruf, erwartet 2, haben 4 (Zeile 20)

  4. Konfliktarten für 'bewegen' (Zeile 42)

Hier ist der Code:

#include<stdio.h> 

void printField(int *field); 
void move(int *field, int *posX, int *posY, char zug); //line 4 

int main() { 

    int field[8][8] = { 0 }, posX=0, posY=0; 
    char zug; 

    // setzen der Spielfigur 
    field[posY][posX] = 1; 

    printf("\nBeenden mit x\n"); 

    do { 
     printField(&field[0][0]); 
     printf("\nZug [w hoch, a links, s runter, d rechts]: "); 
     scanf("%c", &zug); 
     move(&field[0][0], &posX, &posY, zug); //line 20 
    }while(zug != 'x'); 

    return 0; 
} 


// Ausgabe Spielfeld 
void printField(int *field) { 
    printf("\n"); 
    int i, j; 
    // Schleife fuer Zeilen, Y-Achse 
    for(i=0; i<8; i++) { 
     // Schleife fuer Spalten, X-Achse 
     for(j=0; j<8; j++) { 
      printf("%d ", *(field+i*8+j)); 
     } 
     printf("\n"); 
    } 
} 

// Spielfigur bewegen 
void move(int *field, int *posX, int *posY, char zug) { //line 42 
    // alte Position loeschen 
    *(field + *posY * 8 + *posX) = 0; 

    // neue Position bestimmen 
    switch(zug) { 
     case 'w': (*posY)--; break; 
     case 'a': (*posX)--; break; 
     case 's': (*posY)++; break; 
     case 'd': (*posX)++; break; 
    } 

    // Grenzueberschreitung pruefen 
    if(*posX < 0) *posX = 7; 
    if(*posX > 7) *posX = 0; 
    if(*posY < 0) *posY = 7; 
    if(*posY > 7) *posY = 0; 

    // neue Position setzen 
    *(field + *posY * 8 + *posX) = 1; 
} 
+0

Der Compiler sagt Ihnen sicherlich Zeilennummern mit den Fehlermeldungen, oder? – alk

+0

Zeile 4: Widersprüchliche Typen für ‚move‘ Zeile 20: Implizite Deklaration der Funktion ‚Bewegung‘ ist ungültig in C99 Zeile 20: Zu viele Argumente Aufruf funktionieren, erwartet 2, haben 4 Linie 42: Widersprüchliche Typen für 'bewegen' – Eduard

+0

Danke! Und jetzt werden Sie mit Sicherheit den Code kommentieren, um uns zu sagen, welche Zeilen 4, 20 und 42 sind? – alk

Antwort

1
Conflicting types for 'move' (Line 4) 
... 
Too many arguments to function call, expected 2, have 4 (Line 20) 

Für mich sieht aus, als wenn die <stdio.h> in einer Funktion move() (Angabe 2 genannt zieht die Verwendung in einer bestehenden Erklärung aber 4 Parameter).

Versuchen Sie, Ihre Funktion move() zu etwas wie my_move() umzubenennen.

+0

Danke! Das hat geklappt. – Eduard

+0

@alk Netter Fang! +1. Was macht die "moves" -Funktion von OPs "stdio.h"? –

+0

@CoolGuy: Ich habe keine Ahnung ... – alk

Verwandte Themen