nichtdeklarierter Bezeichner trotz include



  • hi
    ich nutze in einer klasse ein klasse aus einer anderen datei.
    ich habe diese datei (Punkt.hpp) auch eingebunden (sogar zwiemal, da sie auch in ALL.hpp eingebunden ist. bild.hpp übrigens auch), aber der compiler meint, dass diese genutzte klasse nicht existiert..
    was mache ich falsch?

    #pragma once
    #include"ALL.hpp"
    #include "Punkt.hpp"
    
    class Bild{
    public:
    	Bild(int iID);
    	~Bild(void);
    	//vars
    		int m_iBID;
    		std::vector< Punkt > m_Punkte;
    
    };
    
    bild.hpp(19): error C2065: 'Punkt': nichtdeklarierter Bezeichner
    

  • Mod

    Der Compiler hat immer recht. Zeig mal die Punkt.hpp und die ALL.hpp. Und eine Datei Namens ALL.hpp klingt schonmal nicht vertrauenserweckend. Falls der Name bedeuten sollte, dass da alle Header gesammelt drinstehen, ist das in der Regel keine gute Idee.



  • hier
    wieso soll es eine schlechte idee sein, wenn da alle header drinnenstehen?
    die haben ja alle ein "#pragma once".

    //all
    #pragma once
    //andere
    #include<vector>
    #include<complex>
    #include<string>
    #include<sstream>
    #include <ctime>
    #include <cmath>
    
    #include<fstream>
    
    #include<windows.h>
    
    //projekt
    #include "Vector2.hpp"
    #include "Punkt.hpp"
    #include "Bild.hpp"
    
    //punkt
    #pragma once
    #include"ALL.hpp"
    class Punkt
    {
    public:
    	Punkt(void);
    	~Punkt(void);
    	bool load(bcString sData);
    	//vars
    		Vector2 m_v2Coord;
    		bool m_bIstGenau;
    		int m_iCnt;
    		std::vector< Punkt*>	vpChildren,
    					vpParents;
    };
    


  • wsax schrieb:

    wieso soll es eine schlechte idee sein, wenn da alle header drinnenstehen?

    Weil man dann sehr häufig dein Problem bekommt und unnötigerweise Abhängigkeiten zwischen verschieden Übersetzungseinheiten schafft.

    Der Compiler sieht bei dir zuerst bild.hpp, dann punkt.hpp. Deshalb bekommst du die Fehlermeldung. Punkt.hpp braucht aber nach deinem Code Bild überhaupt nicht. Wenn punkt.hpp also niemals ein include für bild.hpp hat, kann der Fehler erst gar nicht eintreten.



  • wäre es ok, wenn ich standartbibeliotheken dort einbinde und globale variablen dort festlege?



  • wsax schrieb:

    wäre es ok, wenn ich standartbibeliotheken dort einbinde und globale variablen dort festlege?

    Wenn du schon globale Variablen verwenden willst, musst du sie doch bestimmt nicht überall kennen, oder? Das gleiche gilt für die Bibliotheksheader: du brauchst doch sicher nicht alle überall?



  • die globale variable ist ein logfile....
    die brauche dich in allen klassen bis auf einer


Log in to reply