enum als rückgabeparameter?

Verschiedenes zu Qt
Antworten
[ToTTo]
Beiträge: 41
Registriert: 2. November 2005 19:00

enum als rückgabeparameter?

Beitrag von [ToTTo] »

Hi,

habe ein allgemeines C++ Problem.
Ich habe eine Funktion geschrieben welche mir einen enum-Wert zurückgeben soll. Unter Windoof kein Problem unter Linux leider schon.

Code: Alles auswählen

enum MyEnum{Wert1, Wert2, Wert3};

MyEnum::Klasse::get_Wert()
{
     return MyEnum::Wert2;
}
Ich bekomme unter Linux den Fehler, dass MyEnum weder eine Klasse noch ein Namespace ist.

Kann mir jemand sagen wie ich das unter Linux zum rennen bekomme?

Gruß

ToTTo
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Code: Alles auswählen

enum MyEnum{Wert1, Wert2, Wert3};

MyEnum Klasse::get_Wert()
{
     return Wert2;
} 
oder, wenn MyEnum im Namespace (also der Klasse) Klasse liegt

Code: Alles auswählen

class Klasse{
...
public:
  enum MyEnum{Wert1, Wert2, Wert3};
}

Klasse::MyEnum Klasse::get_Wert()
{
     return Klasse::Wert2;
} 
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
[ToTTo]
Beiträge: 41
Registriert: 2. November 2005 19:00

Beitrag von [ToTTo] »

A habe ich schon versucht geht aber leider nicht.
Zu B der enum muss global bleiben und muss in jeder Klasse verfügbar sein.

Kann das noch nen grund haben?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Wenn Du ihn in die Klasse und dort public machst, kannst du von überall mittels Klasse::WertX drauf zugreifen. Ist aber Geschmackssache bzw. kommt drauf an, was der Wert bedeutet (ob er zu der Klasse gehört oder nicht). Nur in den globalen Namespace ist nicht so schön (meiner Meinung nach).

A muss gehen - zumindest funktioniert es bei mir. Was bekommst du denn für einen Fehler? evtl. muss die Funktion

Code: Alles auswählen

enum MyEnum Klasse::get_Wert() 
heissen
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

schau dir mal die Doku zu QFlags an.
Das ist genau das was du suchts.
[ToTTo]
Beiträge: 41
Registriert: 2. November 2005 19:00

Beitrag von [ToTTo] »

Die Aifrufe sind alle nicht wirklich C++ konform habe ich gemerkt :-).
Ein Aufruf muss so aussehen.

Code: Alles auswählen

return MyEnum(Wert2);
So, hätten wir das auch geklärt. *fg*

Gruß

ToTTo
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

[ToTTo] hat geschrieben:

Code: Alles auswählen

return MyEnum(Wert2);
Das ist ein Cast - da kann ich auch MyEnum(4711) reinschreiben... !
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
[ToTTo]
Beiträge: 41
Registriert: 2. November 2005 19:00

Beitrag von [ToTTo] »

Christian81 hat geschrieben: Das ist ein Cast - da kann ich auch MyEnum(4711) reinschreiben... !
Das ist die einzige Möglichkeit unter allen Compilern keine Warnungen zu produzieren, weil somit eine Zuordnung zu den gemeinten ENUM führen.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

[ToTTo] hat geschrieben:
Christian81 hat geschrieben: Das ist ein Cast - da kann ich auch MyEnum(4711) reinschreiben... !
Das ist die einzige Möglichkeit unter allen Compilern keine Warnungen zu produzieren, weil somit eine Zuordnung zu den gemeinten ENUM führen.
Was für ein Compiler bringt welche Fehlermeldung bei welchem Code? Wenn es MSVC6 ist, vergiss es - der kann eh nichts richtig.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Esleborn
Beiträge: 265
Registriert: 27. Januar 2005 01:23
Wohnort: Baden-Würtenberg
Kontaktdaten:

Beitrag von Esleborn »

Christian81 hat geschrieben:Was für ein Compiler bringt welche Fehlermeldung bei welchem Code? Wenn es MSVC6 ist, vergiss es - der kann eh nichts richtig.
hat irgendwer hier behauptet, dass MSVC6 ein C++ Compiler sei?
Glaube an eine Lösung, nur dann kannst du auch eine finden.
[ToTTo]
Beiträge: 41
Registriert: 2. November 2005 19:00

Beitrag von [ToTTo] »

Oh Jungs, ihr habt es schon echt raus....

Beispiel:

Code: Alles auswählen

enum Enum1
{
     None,
     Wert1,
     Wert3
};

enum Enum2
{
    None,
    Wert2,
    Wert4
};

Enum1 get_Wert()
{
    return None;
}
Was passiert unter .Net und was unter gcc?

Kleiner Tipp, der Bereichsoperator "::" ist nicht erlaubt.

Viel Spass beim ausprobieren und wundern. :shock:

Gruß

ToTTo
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

[ToTTo] hat geschrieben:
Was passiert unter .Net und was unter gcc?

Kleiner Tipp, der Bereichsoperator "::" ist nicht erlaubt.

Viel Spass beim ausprobieren und wundern. :shock:

Gruß

ToTTo
Und was willst du uns damit sagen? Dass du deine Enums so blöd benennst und deshalb einen Cast brauchst? Deswegen habe ich ja die Namespaces vorgeschlagen...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
[ToTTo]
Beiträge: 41
Registriert: 2. November 2005 19:00

Beitrag von [ToTTo] »

Das war ein kleines Beispiel. Die Namen der enums spielen darin keine Rolle sondern nur der Name des ersten Elemetes jedes enums.
Denk mal drüber nach....

Sobald du Applikationen schreiben kannst, die mehr als 5 Klassen haben und auch noch plattformunabhänig sein sollen reden wir weiter.
Bis dahin empfehle ich dir erstmal ein schönes Buch:
"Die C++ Programmiersprache von Bjarne Stroustrup."

Wenn du das gelesen hast, kannst du auch mal Antworten auf schwierigere Fragen geben als nur zu solchen wie: "Wie ändere ich die Hintergrundfarbe meines Widgets?".

Gruß

ToTTo
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

[ToTTo] hat geschrieben:Das war ein kleines Beispiel. Die Namen der enums spielen darin keine Rolle sondern nur der Name des ersten Elemetes jedes enums.
Denk mal drüber nach....
Wie ich schon sagte - dann sind Deine enums schlecht gewählt bzw. gehören in verschiedene Namespaces (Dazu steht unter Garantie auch was in deinem Buch...).

Ich finde es sehr bedenklich wie Du Dich hier aufführst. Nicht dass ich das totale Unschuldslamm wäre (meine manchmal recht knappen Antworten zielen eher darauf ab die Leute zum Nachdenken und Suchen anzuregen anstatt stupide Frage zu stellen), aber Du hast Dich mit deinem Post selbst disqualifiziert... Wie kommst du auf die Idee mir zu sagen dass ich programmieren lernen sollte ohne dass Du mich auch nur anstatzweise kennst?
Geh zurück in Deinen Kindergarten und erwarte bitte keine Antwort auf irgendeiner Deiner Fragen von mir!
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten