Error: C3646 Unbekannter Überschreibungsspezifizierer



  • Also,
    Ich sitze grade an einem eigenen Musikplayer in der Consol, und bekomme die ganze Zeit folgende Fehlermeldungen:

    selectmusic.h(13): error C3646: "txt": Unbekannter Überschreibungsspezifizierer
    selectmusic.h(14): error C3646: "opt": Unbekannter Überschreibungsspezifizierer
    

    Der Header sieht bisher so aus:

    #pragma once
    
    #include <SFML\Audio.hpp>
    #include "Texter.h"
    #include "options.h"
    #include "b_dMusic.h"
    
    class selectMusic
    {
    private:
    	//Variables
    	sf::Music music;
    	Texter txt;
    	options opt;
    	std::string Choice = "";
    	float fChoice;
    
    public:
    	//Con/Destructor
    	selectMusic();
    	virtual ~selectMusic();
    
    	//Functions
    	void Select();
    	void NowPlaying();
    };
    

    Texter.h und options.h habe ich auch in andere Klassen integriert, dort kommt aber keine Fehlermeldung, obwohl der Code genau gleich aussieht:

    #pragma once
    
    #include <SFML\Audio.hpp>
    #include "Texter.h"
    #include "options.h"
    #include "b_dMusic.h"
    #include "selectMusic.h"
    
    class menu
    {
    private:
    	//Variables
    	b_dMusic b_d;
    	selectMusic sm;
    	Texter txt;
    	std::string Choice = "";
    	float fChoice;
    
    	//Functions
    	void MainMenu();
    
    public:
    	//Con/Destructor
    	menu();
    	virtual ~menu();
    
    	//Functions
    	int loop();
    };
    
    

    Ich habe schon nach Lösungen gesucht, aber bisher nichts gefunden was mir weiter geholfen hat.
    Hat jemand von euch eine Idee?



  • Ohne die genaue Definition von Texter und/oder options kann man da nicht viel sagen. Aus irgendeinem Grund erwartet der Compiler an dieser Position einen Override specifier, das ist in C++ z.B. das override in void void f() override;. Das ist an dieser Stelle so abstrus, da muss mindestens an Texter irgendwas oberfaul sein.



  • @brain_damage-exe Mögliche Ursachen:

    • zwei Includes includieren sich gegenseitig.
    • irgendwo eine geschweifte Klammer vergessen.

    Lass das ganze mal durch den Precompiler verarbeiten und schau Dir dessen Ergebniss an.



  • @mgaeckler Danke, das hat wirklich geholfen.
    Ich hatte in options.h zu viel included was ich nicht brauchte, weil ich einfach die anderen includes kopiert habe.
    Typischer Anfängerfehler, glaub ich mal.



  • Ja, genau - nur das Einbinden ("includen"), was auch wirklich benötigt wird.
    Bei Referenzen und Zeigern reichen auch Vorwärtsdeklarationen (forward declarations).

    PS: Das Stichwort zum Fehler heißt "cross include".