Konstanten innerhalb einer Klasse deklarieren
-
sn0b schrieb:
wie mache ich das bei mehreren konstanten?
Was versuchst Du eigentlich? Einer Konstante mehrere Werte zuzuordnen?
-
nein.
ich möchte mehrere char konstanten haben.
also:
WIN_LAUFWERK = "bla1"
WIN_ORDNER = "bla2"
WIN_PFAD = "bla3"jedes eine eigene konstante mit eigenem wert.
und das halt alles innerhalb einer klasse, wie oben beschrieben.
-
Und was soll sowas
MyRegexp() : WIN_PFAD( "([A-Za-z]:\\\\)?" "([A-Za-z0-9_\\-\\.~]([A-Za-z0-9_\\-\\. ~])*\\\\)*" "([A-Za-z0-9_\\-\\.~]([A-Za-z0-9_\\-\\. ~])*)" )
Deiner Ansicht nach tun?
-
also:
ich habe eine klasse geschrieben die mittels regular expressions prüft ob eine eingabe gewissen kriterien entspricht. das
"([A-Za-z]:\\\)?"
"([A-Za-z0-9_\-\.~]([A-Za-z0-9_\-\. ~])\\\)"
"([A-Za-z0-9_\-\.~]([A-Za-z0-9_\-\. ~])*)"ist das kriterium für die eingabe.
ich möchte halt verschiedene varianten prüfen lassen. eben ob die eingabe
einem laufwerk entspricht, einer datei, einem pfad, einer url usw.
diese kriterien muß ich halt konstant angeben, damit ich dem regular expressions zusatzprog (greta für dev-c++) sagen wie es prüfen soll.grundsätzlich muß ich halt nur wissen wie ich (char) konstanten innerhalb einer klasse initialisere.
ich hoffe das war verständlich und bitte weiterhin um hilfe!
-
sn0b schrieb:
ich habe eine klasse geschrieben die mittels regular expressions prüft ob eine eingabe gewissen kriterien entspricht. das
"([A-Za-z]:\\\)?"
"([A-Za-z0-9_\-\.~]([A-Za-z0-9_\-\. ~])\\\)"
"([A-Za-z0-9_\-\.~]([A-Za-z0-9_\-\. ~])*)"ist das kriterium für die eingabe.
Dann brauchst Du aber entweder einen Vektor (Array) oder mehrere Strings.
grundsätzlich muß ich halt nur wissen wie ich (char) konstanten innerhalb einer klasse initialisere.
Siehe oben; hab vorher schon was gepostet.
-
@sn0b
Erstmal kannst du keine Funktionen mit der selben Signatur mehrfach definieren (MyRegexp::MyRegexp()).
Und zweitens ist es sinnvoll, die static Konstanten ausserhalb der klasse zu initialisieren. Wenn du das über den ctor machst, musst du ja erst ein Objekt instanzieren, um sie zu benutzen. Ziemlich unpraktisch.
-
class MyRegexp { public: /* Pattern-Konstanten für Windows: Laufwerk, Ordner */ static const char WIN_LAUFWERK[255] = "Kriterium/Pattern für Laufwerk"; static const char WIN_ORDNER[255];/* = "Kriterium/Pattern für Ordner"; static const char WIN_DATEI[255];/* = "Kriterium/Pattern für Datei"; /* Pattern-Konstanten für eine URL */ static const char HOST[255]; = "Kriterium/Pattern für URL"; /* Prüft den gegebenen String auf Gleichheit mit dem gegebenen Pattern. Groß-/Kleinschreibung wird ignoriert. Bei einer Übereinstimmung wird true zurückgegeben. */ bool test(std::string pat, std::string str) { regex::match_results results; regex::rpattern pattern("^("+pat+")$",regex::NOCASE|regex::SINGLELINE); // ist Strings mit + verketten langsam ? regex::match_results::backref_type br=pattern.match(str,results); if (br.matched) return true; else return false; } // ~MyRegexp() { } private: };
so sieht der vollständige code aus.
der methode test() wird eins der obigen Pattern übergeben, sowie die eingabe und diese testet dann ob die eingabe mit dem pattern übereinstimmt.
daher definiere ich mehrere konstanten und ich denke dass ich kein Vektor (Array) dafür brauche.
dies nur um die sache zu verdeutlich was ich will.dein posting oben habe ich wohl gesehen. aber wie bringe ich das hiermit in einklang??
du initialiserst die konstante ja außerhalb der klasse. meine klasse wird allerdings wiederum von einer anderen klasse benutzt, welche sich natürlich nicht mehr darum kümmern soll noch irgendwelche konstanten zu deklarieren mit denen sie ja eigentlich nix direkt zu tun hat.ich hoffe ich nerve nicht
-
sn0b schrieb:
dein posting oben habe ich wohl gesehen. aber wie bringe ich das hiermit in einklang??
du initialiserst die konstante ja außerhalb der klasse. meine klasse wird allerdings wiederum von einer anderen klasse benutzt, welche sich natürlich nicht mehr darum kümmern soll noch irgendwelche konstanten zu deklarieren mit denen sie ja eigentlich nix direkt zu tun hat.Sorry, ich dachte, das sei klar.
Du initialisierst einfach in deineklasse.cpp, während Du in deineklasse.hpp nur die Deklaration reinschreibst.ich hoffe ich nerve nicht
Überhaupt nicht; konkrete Fragen sind völlig in Ordnung, besonders wenn der Poster nicht nur völlig passiv auf eine fertige Lösung wartet.
-
sn0b schrieb:
meine klasse wird allerdings wiederum von einer anderen klasse benutzt, welche sich natürlich nicht mehr darum kümmern soll noch irgendwelche konstanten zu deklarieren mit denen sie ja eigentlich nix direkt zu tun hat.
Und? Wenn eine andere Klasse deine Klasse MyRegexp benutzen kann, dann kann sie genauso gut die darin enthaltenen Konstanten benutzen, selbst wenn sie erst ausserhalb definiert werden. Irgendwie seh ich nicht so wirklich, wo dein Problem liegt.
-
nman schrieb:
godlikebot: Bist Du sicher dass das so geht?
Ich hab beim copy'n'pasten das static übersehen :). Naja, groovemaster hat ja schon geschrieben, dass das, was ich geschrieben hab nicht wirklich ideal ist.
Static Variablen sollten auf jeden Fall ausserhalb der Klasse definiert werden.
-
groovemaster schrieb:
Irgendwie seh ich nicht so wirklich, wo dein Problem liegt.
Ich glaube, er hat nicht verstanden, dass er das auch selbst außerhalb der Klasse machen kann und das nicht erst die Benutzer seiner Klasse machen müssen.
-
@nman: jepp so wars. aber deine erklärung mit deineklasse.cpp und deineklasse.hpp war super. ich denke ich habs jetzt.
vielen dank euch allen für die hilfe!!!