Funktionen spalten auf cpp/hpp? Expected initializer before...



  • Hallo, ich schreibe nach langer Pause ( 😞 ) das wohl bekannte Zahlen-Raten Spiel.

    Wenn ich versuche die ( noch unfertigen, aber eigentlich kompilierbaren ) Teile zum kompilieren, erhalte ich einen Fehler "expected initializer before <der Rückgabewert des Prototypes einer meiner Funktionen>". Egal welchen Typ der Rückgabewert hat.

    Ich habe gemerkt dass man diese Fehlermeldung durch ein Semikolon vor dem Rückgabewert umgeht.
    Allerdings hällt mich die darauffolgende Fehlermeldung "'<Funktionsname>' was not declared in this scope" auf.

    Zur Verständniss: meine Funktionen sind auf source- und headerdateien verteilt. Nun bin ich mir nicht sicher ob das so sein soll?
    Ich kenne diese Fehlermeldung eigentlich aus dem vergessen eines Semikolons nach einer Klassendeklaration.

    Nun, kann es sein dass ich wer weiss woher aufgeschnappt / mir eingebildet habe dass man Funktionen wie Klassen auf source- und headerdateien aufspalten soll, was jedoch nicht der Fall ist?

    Falls man Funktionen tatsächlich aufspalten sollte, was mache ich falsch? Ich habe alles möglcihe ausprobiert mit den includes; in einem meiner anderen fertigen Projekte klappt alles mit der gleichen Vorgehensweise wunderbar, allerdings handelt es sich dort um Klassen.

    Edit:

    main.cpp

    #include "main.hpp"
    
    int main (){
        std::cin.get();
        return 0;
    }
    

    menu.cpp

    #include "main.hpp"
    
    void DisplayMenu (){
        Play (1);
    }
    

    play.cpp

    #include "main.hpp"
    
    void Play (unsigned int Diffic){
    }
    

    main.hpp

    #ifndef IOSTREAM
    #define IOSTREAM
    #include <iostream>
    #endif
    
    #ifndef CTIME
    #define CTIME
    #include <ctime>
    #endif
    
    #ifndef PLAY_HPP
    #define PLAY_HPP
    #include "play.hpp"
    #endif
    
    #ifndef MENU_HPP
    #define MENU_HPP
    #include "menu.hpp"
    #endif
    

    menu.hpp

    void DisplayMenu (unsigned int *)
    

    play.hpp

    void Play (unsigned int)
    

    Der Fehler wird bei menu.hpp angezeigt: error: expected initializer before 'void'

    lG



  • Das ist ein Syntaxfehler. Zeig uns ein minimales und komplettes Codebeispiel, das den Fehler aber immer noch repräsentiert.



  • Du hast die Semikolons nach den Funktionsdeklarationen vergessen. Im Übrigen wäre es schöner, die Include-Guards in die Header zu schreiben, die sie guarden sollen. Sonst ist das ganze irgendwie sinnlos.



  • under_cover schrieb:

    menu.cpp

    #include "main.hpp"
    
    void DisplayMenu (){ //weiter unten steht aber DisplayMenu (unsigned int *)
        Play (1);
    }
    

    main.hpp

    //Header-Guards brauchst du eigentlich nur um eigene Header ;)
    #ifndef IOSTREAM
    #define IOSTREAM
    #include <iostream>
    #endif
    
    #ifndef CTIME
    #define CTIME
    #include <ctime>
    #endif
    
    #ifndef PLAY_HPP
    #define PLAY_HPP
    #include "play.hpp"
    #endif
    
    #ifndef MENU_HPP
    #define MENU_HPP
    #include "menu.hpp"
    #endif
    

    menu.hpp

    void DisplayMenu (unsigned int *)
    


  • *schäm* Danke, es klappt nun.
    Ich habe es auch mit >einem< Semikolon versucht, habe mir aber nichts gedacht nachdem der Fehler auf einmal bei der jeweils anderen Funktion auftauchte 😡

    Peinlich peinlich... aber ich zitiere

    Hallo, ich schreibe nach langer Pause

    Danke euch dreien, schönen Tag noch 🙂


Anmelden zum Antworten