BOOL / bool



  • Lass die Finger von den WinAPI Headern! In Deinem eigenen Code verwende bool. Wenn du in kontakt mit der WinAPI kommst, dann caste dementsprechend.

    greetz, Swordfish



  • BOOL nach bool konvertieren:

    BOOL b1 = TRUE;
    bool b2 = b1 != FALSE;
    


  • "In Deinem eigenen Code verwende bool"
    das tue ich

    "Wenn du in kontakt mit der WinAPI kommst, dann caste dementsprechend."
    ich komm zwar in kontakt damit aber muss nirgendwo BOOL nutzen und tu das auch nicht - es ist eben bool - und es wird ein bool erwartet...

    wie bereits in dem bsp beschrieben...
    hier noch mal der genaue sachverhalt:

    class c1
    {
    public:
    static bool m_boolean (true);
    }
    
    class c2
    {
    public:
    void GetABoolean (bool v);
    bool SendABoolean (void);
    };
    
    #include <....>
    //unter anderem "windef.h"
    
    void c2::GetABoolean (bool v) //ok
    {
    ;
    }
    
    void otherfkt (void)
    {
    GetABoolean (c1::m_boolean); //WARNING
    }
    bool c2::SendABoolean (void) //NICHT ok -> falscher rückgabetyp... -.-
    {
    return true;
    }
    

    lol... jz hab ichs aber doch wieder rausgenommen und auf einmal gehts -.- haltet mich ruhig für doof - ich saß heut > 2 Stunden daran - hab alles 5 mal umbenannt etc bevor ich mich dazu entschieden hatte, doch in den winapi-headern rumzukritzeln - also an rechtschreibfehlern lag es nicht - aber is mir jz auch egal ^^ es funtzt wieder xD



  • also ich würd die winapi header auf keinen fall ändern

    das mag vllt jetzt für dich funktionieren aber später hast du irgendwelche probleme mit opensource den du bei dir anschauen willst oder wenn du mit anderen leuten an einem projekt arbeitest und sich eure header unterscheiden

    wenn du die alten winapi funktionen und prozeduren die BOOL verwenden mit deinem bool code mixt benutz einfach sowas

    //warning C4800: 'BOOL' : forcing value to bool 'true' or 'false' (performance warning)
    #pragma warning(disable:4800)
    	bool isHighResolutionPerformanceCounterAviable = QueryPerformanceFrequency((LARGE_INTEGER*)&frequency);
    #pragma warning(default:4800)
    

    das warning ist nicht weiter tragisch, und das ist jedenfalls ne bessere lösung als in den windows headern rumzupfuschen



  • müsste das nicht
    GetABoolean (c1::m_boolean**()**);
    heissen ? 😕



  • Hmm, kommt drauf an, was da machen will. Das true dort drinn ergibt für mich keinen Sinn. Vlt. will er sie auch nur initialisieren. Sollte aber Initialisierungsliste nutzen.



  • is ne statische member - und die sollte so initialisiert werden...
    außerdem ist das eigtl alles nur nen bsp - so ne klassen hab ich nicht wirklich xD



  • sry für doppelpost, aber nachdem ich heut wieder bissl gecodet habe (und gestern die paar zeilen wieder rausgenommen habe hier noch mal der genaue sachverhalt):

    struct Tblock
    	{
    		private:
    			const Tcoord m_size;
    			const std::string m_name;
    			const Nblock::ID m_blockid;
    			const bool m_u18;
    			const bool m_orientation;
    			const std::string m_remark;
    			std::string m_text[3][4];
    		public:
    			std::vector <Tseat *> m_seats;
    			std::vector <Tseperator *> m_seps;
    
    			Tblock (const std::string &_name, Nblock::ID _blockid, Ncoord::ROW_AND_COL_VAR _cols, Ncoord::ROW_AND_COL_VAR _rows, bool _u18, bool _orientation, const std::string (& _text)[4][3]);
    			~Tblock (void);
    
    			Nblock::ID GetID (void) const {return m_blockid;};
    			std::string GetName (void) const {return m_name;};
    			std::string GetRemark (void) const {if (m_remark.empty ()) return "0"; else return m_remark;};
    			Ncoord::ROW_AND_COL_VAR GetCols (void) const {return m_size.GetCol ();};
    			Ncoord::ROW_AND_COL_VAR GetRows (void) const {return m_size.GetRow ();};
    			bool IsU18 (void) const {return m_u18;};
    			bool GetOrientation (void) const {return m_orientation;};
    			void AddSeat (const Ncoord::ROW_AND_COL_VAR &col, const Ncoord::ROW_AND_COL_VAR &row, const Nseat::STATUS_VAR &status, const Nclient::ID &uid);
    			void AddSeperator (const bool orientation, const Ncoord::ROW_AND_COL_VAR &_where, const Nseperator::SIZE_VAR &size);
    			std::string KommaTexts (void) const;
    	};
    
    #include //windowszeugs
    
    /*...*/
    
    Nsitzplan::Tblock::Tblock (const std::string &_name, Nblock::ID _blockid, Ncoord::ROW_AND_COL_VAR _cols, Ncoord::ROW_AND_COL_VAR _rows, bool u18, bool _orientation, const std::string &_remark, const std::string (& _text)[3][4])
    	: m_blockid (_blockid), m_size (_cols, _rows), m_name (_name), m_u18 (u18), m_orientation (_orientation), m_remark (_remark)
    	{
    		m_text[0][0] = _text[0][0];	m_text[0][1] = _text[0][1];	m_text[0][2] = _text[0][2];	m_text[0][3] = _text[0][3];
    		m_text[1][0] = _text[1][0];	m_text[1][1] = _text[1][1];	m_text[1][2] = _text[1][2];	m_text[1][3] = _text[1][3];
    		m_text[2][0] = _text[2][0];	m_text[2][1] = _text[2][1];	m_text[2][2] = _text[2][2];	m_text[2][3] = _text[2][3];
    	};
    
    /*...*/
    
    :\c\dahlia\konsole\dahlia_konsole_new\data\sitzplan.cpp(22) : error C2511: 'Nsitzplan::Tblock::Tblock(const std::string &,Nsitzplan::Nblock::ID,Nsitzplan::Ncoord::ROW_AND_COL_VAR,Nsitzplan::Ncoord::ROW_AND_COL_VAR,BOOL,BOOL,const std::string &,const std::string (&)[3][4])': Überladene Memberfunktion nicht in 'Nsitzplan::Tblock' gefunden
            f:\c\dahlia\konsole\dahlia_konsole_new\data\sitzplan.hpp(81): Siehe Deklaration von 'Nsitzplan::Tblock'
    

    Er denkt, dass die Member vom Typ BOOL (also int) sind - und hat jz nen problem damit, dass er die überladung nicht kennt... wie bekomm ich das jz sauber hin ohne wieder in der 'windef.h' rumkritzeln zu müssen?

    Und seit wann gilt "BOOL" == "bool"?
    Dachte immer, dass ALLES casesenitiv ist - selbst defines...

    Danke...



  • Ja, das passiert, wenn man so spät erst Code zeigt und meint, den Fehler selbst schon lokalisiert zu haben. Zwei Seiten Thread für Nüsse.

    Der Fehler liegt schlicht und ergreifend darin, dass die Deklaration und die Definition vom Konstruktor unterschiedlich sind:

    Tblock (const std::string &_name, Nblock::ID _blockid, Ncoord::ROW_AND_COL_VAR _cols, Ncoord::ROW_AND_COL_VAR _rows, bool _u18, bool _orientation, const std::string (& _text)[4][3])
    Nsitzplan::Tblock::Tblock (const std::string &_name, Nblock::ID _blockid, Ncoord::ROW_AND_COL_VAR _cols, Ncoord::ROW_AND_COL_VAR _rows, bool  u18, bool _orientation, const std::string &_remark, const std::string (& _text)[3][4])
    


  • huch : (

    Den einen Fehler hatte ich danach erst noch reingemacht - nur die [3][4] und [4][3] hatte ich ein wenig übersehen xD

    Danke 😣


Anmelden zum Antworten