Default-Initialisierung/Pointer



  • Hallo,
    ich habe eine Klasse A und möchte in der Header-Datei eine die int "bla" deklarieren. Nun soll in einer Funktion aus A überprüft werden, ob "bla" gesetzt wurde. Wie mache ich das am besten?

    Ich habe das bisher einfach so gelöst, dass ich "bla" mit dem Default-Wert "0" initialisiert habe und überprüft habe ab bla=0 ist. Wenn dem so sein sollte, ist bla nicht durch meine Funktion deklariert (sondern besitzt eben noch den default-wert).

    Jetzt hat sich in meinem konkreten Fall herausgestellt, dass der Wert "0" auch durch die Funktion gesetzt werden kann und ich darauß schließen kann, dass wenn bla=0 ist sie den defaultwert hat.
    Wie löst man sowas am elegantesten?
    Auch mit dem nullptr hat es nicht funktioniert...

    Kurzes Programmbeispiel:
    A.h

    class A {
    private:
        int bla = 0;
    public:
        void funktionA();
    };
    

    A.cpp:

    void A::funktionB(){
        /*
         * 
         * Hier passiert irgendetwas.. vielleicht ist A hiernach deklariert vielleicht nicht..
         * 
         */
         if(rand()%100 > 50){bla = 0;}
    
     }
    void A::funktionA() {
    
        //Wie überprüfe ich, ob bla durch funktionB gesetzt wurde???
    
    }
    

    main.cpp:

    main() {
        A test;
        test.funktionB();
        test.funktionA();
    
        return 0;
    }
    

    Es soll ohne irgendein boolean "gesetzt" oder "nichtgesetzt" funktionieren.



  • Kleine Berichtigung.
    In der Header-Datei habe ich funktionB vergessen. Ist nur ein copy&paste-fehler.
    Und ich meinte natürlich "..und ich darauß NICHT schließen kann,.."

    Theoretisch könnte ich in meinem konkreten Fall bla einfach mit -1 initialisieren, aber ich suche eine allgemeine Lösungen. Ich meines es muss doch irgendwie möglich sein eine Variable zu deklarieren und zur laufzeit zu überprüfen ob die Variable definiert wurde oder eben nicht


  • Mod

    fragenstellerC schrieb:

    Ich meines es muss doch irgendwie möglich sein eine Variable zu deklarieren und zur laufzeit zu überprüfen ob die Variable definiert wurde oder eben nicht

    Nein. Völlig falsche Denkweise. Computerprogramme funktionieren so nicht.

    Beschreib lieber, welches Ziel du eigentlich erreichen möchtest, nicht deine Vorstellung davon, wie du dieses Ziel erreichen könntest.



  • Ob eine Variable definiert wurde, merkt der Compiler/Linker zur Compilezeit. Ob eine Variable initialisiert wurde, kann man nicht prüfen. Wenn du den gesamten Wertebereich benötigst, muss du halt noch eine bool Variable daneben legen. boost optional kapselt das für dich.


Log in to reply