C Compiler verlangt declaration specifier - aber warum?

Woodz

Lieutenant
Registriert
Apr. 2009
Beiträge
696
Hallo.

Ich möchte zu übungszwecken eine kleine Spielsimulation von "Mensch ärgere dich nicht" schreiben.
Doch beim Kompilieren erhalte ich folgende Fehlermendung:

error: expected declaration specifiers or ‘...’ before ‘&’ token
82 | void frageAnzahlSpieler(&spiel);

Hier der Code:
C:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <stdbool.h>

#define ANZ_SPIELER_MIN 2
#define ANZ_SPIELER_MAX 4



enum Farbe{Rot, Schwarz, Gelb, Gruen};

typedef struct Feld{

    bool startposition;
    bool startfeld;
    bool spielfeld;
    bool zielfeld;
    bool besetzt;

}Feld;

typedef struct Spieler{

    enum Farbe spielerfarbe;
    Feld startpositionFelder[4];

}Spieler;

typedef struct Spielbrett{

    Feld spielfelder[40];   

}Spielbrett;


typedef struct Madn{
    
    // Madn ... (M)ensch (a)ergere (d)ich (n)icht

    unsigned char anzSpieler;
    Spielbrett spielfeld;
    enum Farbe aktiverSpieler;

}Madn;



// =================== Funktionen =====================
void frageAnzahlSpieler(Madn *spiel);



// ===================== Main ========================
int main(){

    Madn spiel;

    void frageAnzahlSpieler(&spiel);

    return 0;

}




void frageAnzahlSpieler(Madn *spiel){

    bool check;
    
    do{
    
        printf("Anzahl der Spieler (min. ANZ_SPIELER_MIN | max. ANZ_SPIELER_MAX): ");
        check = scanf("%hhu", &(spiel->anzSpieler));
    
    }
    while((check == true) && (spiel->anzSpieler >= ANZ_SPIELER_MIN && spiel->anzSpieler <= ANZ_SPIELER_MAX));

}

Ich versteh aber nicht, warum der Compiler einen "declaration specifier" sucht. Ich übergebe die Adresse bzw. den Pointer des Spiel dessen Datentyp eindeutig in den Deklarationen/Definitionen geklärt ist.

Hat jemand eine Idee, was das Problem ist?

Beste Grüße
 
Das "void" in main() gehört da IMHO nicht hin.

void frageAnzahlSpieler(&spiel);
 
  • Gefällt mir
Reaktionen: up.whatever und Smily
Woah. Wie kann ich nu so blind sein?! Und dafür dieser Aufwand!
Ok, ich danke Dir.

Beste Grüße
 
Noch eine kleine Anmerkung: Die scanf-Verwendung ist nicht korrekt.
scanf returnt einen int, den muss man gegen EOF checken und gegen die Anzahl an inputs im Format string (in deinem Fall: 1). Nicht gegen "true" oder "false".

Für Fortgeschrittene: Von scanf ist allgemein abzuraten. Besser wäre in diesem Fall fgets und strtoul.
 
  • Gefällt mir
Reaktionen: Arc Angeling
@titanskin Das stimmt zwar, war aber überhaupt nicht gemeint. Es war gemeint, dass vor einem Funktions-Call im Body der main-Funktion ausversehen ein "void" stand..
 
Zurück
Oben