Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

28.10.2014, 13:23

[c++] Enum übergeben

Hallihallo!

ich würde gern ein Enum von KlasseA nach KlasseB übergeben. Immoment benutze ich eine Get-Funktion in KlasseA, die von KlasseB dann benutz werden kann.

C-/C++-Quelltext

1
2
3
4
5
KlasseA.hpp

enum TE {bla1,bla2};
TE TestEnum;
TE GetEnum(){return TestEnum;}


das Funzt ohne weitere Probleme...

Nun möchte ich jedoch in KlasseB mit diesem Enum arbeiten zb eine einfache If-abfrage:

C-/C++-Quelltext

1
2
3
4
5
6
KlasseB.cpp

if(KlasseA->GetEnum() == 0)
{
//code
}


Ich dachte nun das ich anstatt der 0 mein bla1 benutzen kann, kann ich jedoch nicht.

was mache ich falsch? Es muss doch möglich sein!
Sonst kann ich mir die Enum Geschichte auch sparen und mit int arbeiten....


Mfg Urprimat
Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program.

Linus Torvalds

2

28.10.2014, 13:33

Wenn du sowas hast:

C-/C++-Quelltext

1
2
3
4
5
class Klasse
{
public:
    enum TE { bla1, bla2, bla3 };
};


Dann kannst du die Typen mit Klasse::TE, Klasse::bla1 ... benutzen.

3

28.10.2014, 13:35

ja wenn sie public sind muss ich sie doch auch garnicht mehr übergeben oder?!

ich dachte nur es wäre kein schöner Programmierstil die enum public zu setzen....

oder sehe ich das falsch?
Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program.

Linus Torvalds

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Urprimat« (28.10.2014, 13:44)


KeksX

Community-Fossil

Beiträge: 2 107

Beruf: Game Designer

  • Private Nachricht senden

4

28.10.2014, 13:48

WIP Website: kevinheese.de

5

28.10.2014, 13:49

Eine get funktion für Enums zu machen ist sinnlos, da man sie ja eh nicht mehr ändern kann. Sie sind ja extra dazu da, statt einer blanken Zahl einen passenden Namen zu benutzen.

Lares

1x Contest-Sieger

  • Private Nachricht senden

6

28.10.2014, 14:51

Es ist wichtig zu wissen, was du genau übergeben willst:
- Eine Variable von Typ deines Enum, die also einen bestimmten Wert hat
- Den Enum-Typ, damit die andere Klasse weiß, welche Werte eine Variable von Typ des Enum haben kann

Damit zweiteres funktioniert, solltest du den Enum-Typ public machen (oder anderweitig für die zweite Klasse sichtbar). Du brauchst aber kein Get() oder ähnliches für den Typ, da es keine veränderbare Eigenschaft des Objekts von Klasse A ist.
Bei einer Variable ist eine Get()-Methode hingegen meistens sinnvoller als public, da im Normalfall nur das Objekt der Klasse A selbst seine Eigenschaften ändern soll.

7

28.10.2014, 15:04

Alles klar vielen Dank für die hilfe ich werds gleich mal ausprobieren.
Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program.

Linus Torvalds

buggypixels

Treue Seele

Beiträge: 125

Wohnort: Meerbusch

Beruf: Programmierer

  • Private Nachricht senden

8

28.10.2014, 20:58

Ich denke mal, es geht eher um so etwas:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
enum Color {RED,GREEN,BLUE};
class A {
public:
  Color getColor() {
    return m_Color;
  }
private:
  Color m_Color;
};
class B {

  void process(const A& a) {
    if ( a.getColor() == RED ) {
    }
  }
};

Also die enum Definition aus der Klasse raus ziehen. Die enum dort public definieren geht auch, aber ergibt vom logischen her nur Sinn, wenn
das enum eigentlich nur innerhalb der Klasse auch eine Bedeutung hat und nur dort.
Aber anhand deines Beispiels kann ich nur raten.

Beiträge: 3

Wohnort: Berlin

  • Private Nachricht senden

9

29.10.2014, 13:51

Die enum Definition als public in der Klasse zu lassen macht schon Sinn, wenn der Typ direkt mit der Klasse zusammenhängt.
Und wenn die Definition nicht in einer Klasse oder in einem Namespace liegt wäre sie global gültig und das könnte zu Konflikten führen. Gerade bei so häufig vorkommenden Wörtern wie Color, RED, GREEN...

10

29.10.2014, 14:42


Werbeanzeige