Wie kann man das enum behandeln, so dass es aus Main.cpp nicht sichtbar ist?

  • C++

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Elanda.

    Wie kann man das enum behandeln, so dass es aus Main.cpp nicht sichtbar ist?

    Hallo zusammen, folgendes Beispiel:

    Das ist Main.cpp

    C-Quellcode

    1. #include "MyHeader.h"
    2. int main(void)
    3. {
    4. MyClass Test1;
    5. Test1.set_a_thing();
    6. return 0;
    7. }


    Das ist die Headerdatei:

    C-Quellcode

    1. #ifndef MY_CLASS_H_
    2. #define MY_CLASS_H_
    3. class MyClass
    4. {
    5. public:
    6. MyClass();
    7. ~MyClass();
    8. enum A_few_Things { yes, no, sometimes, dont_know };
    9. MyClass::A_few_Things set_a_thing();
    10. private:
    11. A_few_Things a_few_things = A_few_Things::dont_know;
    12. };
    13. #endif // !MY_CLASS_H_


    und das ist die zugehörige CPP-Datei:

    C-Quellcode

    1. #include "MyHeader.h"
    2. MyClass::MyClass()
    3. {
    4. }
    5. MyClass::~MyClass()
    6. {
    7. }
    8. MyClass::A_few_Things MyClass::set_a_thing()
    9. {
    10. // for example, return Yes
    11. return A_few_Things::yes;
    12. }


    In Main.Cpp wird die Funktion
    set_a_thing() aufgerufen. Sie selbst soll die Mitglieder des Enums A_few_Things sehen können. Ich möchte jedoch nicht, dass ich die Member aus Main.cpp sehe.


    Ist das möglich? Ich habe bereits das Enum ins private-Feld verschoben gehabt, aber dann kam (logischerweise) der Fehler E0471 class " * " does not have an identifier with the name " * "

    Ich frage nur deshalb, weil ich in C++ mich nicht so dolle auskenne und ich das Enum in VB.net auch private machen würde.
    @Bartosz

    Ich vermute mal, dass es schon reicht wenn die enums (Zeile 10) runter schreibst unterhalb von Zeile 13.
    Der Rückgabewert in der Main müsste man aber dann anders gestalten, z.b als integer.


    Freundliche Grüsse

    exc-jdbi

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „exc-jdbi“ ()

    @exc-jdbi Nein, ich sag ja, aus Main.Cpp wird die Funktion nur aufgerufen. Der interessiert der Rückgabewert nicht.




    Hat sich erledigt, ich hab's nun so gelöst:

    C-Quellcode

    1. #ifndef MY_CLASS_H_
    2. #define MY_CLASS_H_
    3. class MyClass
    4. {
    5. public:
    6. MyClass();
    7. ~MyClass();
    8. void set_a_thing();
    9. private:
    10. enum A_few_Things { yes, no, sometimes, dont_know };
    11. A_few_Things a_few_things = A_few_Things::dont_know;
    12. };
    13. #endif // !MY_CLASS_H_


    und in der Cpp dann

    C-Quellcode

    1. #include "MyHeader.h"
    2. MyClass::MyClass()
    3. {
    4. }
    5. MyClass::~MyClass()
    6. {
    7. }
    8. void MyClass::set_a_thing()
    9. {
    10. a_few_things = MyClass::A_few_Things::dont_know;
    11. }
    Ja das geht auch, dann hast du einfach keinen Rückgabewert.
    Sofern du den aber trotdem willst, dann kann man es auch so machen.

    C-Quellcode

    1. MyClass::MyClass()
    2. {
    3. }
    4. MyClass::~MyClass()
    5. {
    6. }
    7. int MyClass::set_a_thing()
    8. {
    9. return a_few_things = MyClass::A_few_Things::dont_know;
    10. }


    Freundliche Grüsse

    exc-jdbi
    Was allerdings für meinen Eindruck ein Design-smell wäre.
    Wenn man den Rückgabewert bräuchte, sollte man auch benannte Ressourcen zurückgeben insofern es die Möglichkeit ist.
    Was hier eindeutig der Fall wäre, wenn du denn den Rückgabewert benötigtest.

    Mit selbstdokumentierten Werten zu arbeiten ist einfacher, skalierbarer und offensichtlicher als mit statischer Dokumentation.

    Und als zusätzlichen Tipp, wenn du den Wert in erster Linie gar nicht erst bräuchtest, kannst du auch "enum class" verwenden.
    Der Hauptunterschied hier liegt im Geltungsbereich welcher nur für das enum und nicht für den äußeren Bereich gilt, außerdem sind sie Typensicher, bedeutet du musst sie casten um einen Wert zu bekommen.
    ----------------------------------------------------------------------------------------------------------------------

    Hier könnte meine Signatur stehen, aber die ist mir abfußen gekommen.

    ----------------------------------------------------------------------------------------------------------------------

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Elanda“ ()