Seite 1 von 1
enum als rückgabeparameter?
Verfasst: 6. April 2006 11:04
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
Verfasst: 6. April 2006 12:05
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;
}
Verfasst: 6. April 2006 14:50
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?
Verfasst: 6. April 2006 15:15
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
heissen
Verfasst: 6. April 2006 19:43
von BartSimpson
schau dir mal die Doku zu QFlags an.
Das ist genau das was du suchts.
Verfasst: 7. April 2006 15:31
von [ToTTo]
Die Aifrufe sind alle nicht wirklich C++ konform habe ich gemerkt

.
Ein Aufruf muss so aussehen.
So, hätten wir das auch geklärt. *fg*
Gruß
ToTTo
Verfasst: 7. April 2006 17:57
von Christian81
Das ist ein Cast - da kann ich auch MyEnum(4711) reinschreiben... !
Verfasst: 10. April 2006 14:25
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.
Verfasst: 10. April 2006 14:28
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.
Verfasst: 10. April 2006 16:51
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?
Verfasst: 11. April 2006 11:18
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.
Gruß
ToTTo
Verfasst: 11. April 2006 11:32
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.
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...
Verfasst: 11. April 2006 14:19
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
Verfasst: 11. April 2006 15:09
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!