Datei für Konstanten anlegen
-
dann ist es trotzdem eine variable. warum erstellst du dir nicht eine struktur
struct MyConstants
und eine funktionInitializeConstants
, in der die variablen dann initialisiert werden, und übergibst dann überall eine konstante referenz auf diese struktur? das ist viel einfacher und schöner.
-
@Wade1234 sagte in Datei für Konstanten anlegen:
übergibst dann überall eine konstante referenz auf diese struktur
Wie soll ich das machen? Kannst du ein kleines Beispiel dafür zeigen?
-
struct MyConstants { int screenwidth; }; void InitializeConstants(struct MyConstants &myc) { myc.screenwidth = 1000; } void CalculateRectangleSize(int &rectanglesize, const struct MyConstants &myc) { rectanglesize = myc.screenwidth * 8 / 10; } int main() { struct MyConstants myc; InitializeConstants(myc); int rectanglesize; CalculateRectangleSize(rectanglesize, myc); return 0; }
-
@Wade1234 Vielen Dank. Warum benutzt du für MyConstants nicht den Standard Konstruktor? Und warum muss man eine Konstante Referenz übergeben? MyConstants soll ja seine eigene Datei haben, also muss es includiert werden. Dann braucht es den Struct als Übergabeparamter doch nicht mehr?
-
@Wade1234
InitializeConstants
- wofür gab es in C++ nochmal Konstruktoren?
-
@manni66 Zum initialisieren
-
@daniel sagte in Datei für Konstanten anlegen:
@Wade1234 Es ist prinzipiell schon eine Konstante. Nur muss sie nach der Deklaration einmal geladen werden, aber sonst wird sie nicht verändert.
Was bedeutet das konkret? Nach Programmstart werden einmal alle Fonts aus einem fest definierten Ordner eingelesen?
-
@manni66 Ja
-
@manni66 sagte in Datei für Konstanten anlegen:
@Wade1234
InitializeConstants
- wofür gab es in C++ nochmal Konstruktoren?ja da bin ich dann leider raus. ich weiß natürlich, dass es konstruktoren, inititialisierungslisten usw. gibt, aber da fehlte mir jetzt grad mal die fantasie für.
-
Gibt es auch eine Möglichkeit ohne die Struktur? Wie sähe das aus?
-
@daniel was hast du gegen die struktur? du kannst sie überall hinreichen, wo du sie brauchst. also ich weiß ja jetzt nicht, wie dein programm generell aussieht, aber wenn du jetzt ungefähr eine mio konstanten hast, die alle generell von überall lesbar sein müssen, dann bietet sich das doch so an.
wenn du natürlich hier mal eine konstante brauchst und dort eine andere, dann wäre das sicherlich nicht der richtige weg, weil man ja immer nur die daten zur verfügung stellen soll, die auch benötigt werden. dann solltest du dich vielleicht erstmal mit objektorientierter modellierung beschäftigen.
-
-
@manni66 Danke, das probier ich mal
-
Also ich habe meine Struktur,
struct constants { constants(); static constexpr float pi = 3.141592654f; static const sf::Color Plum(205, 120, 205); static const sf::Color tiffanyBlue(50, 168, 168); static sf::Font font; };
Aber wenn ich ihre Member aufrufen will
sf::Color fillColor = constants.tiffanyBlue
Gibt es folgenden Error:
error: expected primary-expression before ‘.’ token
-
Tu mal das
static
wegtun tun. Oder schreib'constants::tiffanyBlue
.
-
@daniel das ist jetzt völlig sinnlos. Wenn du eine struct verwenden willst, musst du auch genau eine Instanz erzeugen und herumreichen. Der Konstruktor wird hier nie benutzt.
-
@Swordfish
Dann gibt es diesen Fehler:error: could not convert ‘mx::constants::tiffanyBlue’ from ‘const sf::Color(int)’ to ‘sf::Color’
Und unabhängig davon auch dieser:
error: expected identifier before numeric constant static sf::Color Plum(205, 120, 205);
-
@manni66 Aber bei einer statischen Member Variable brauche ich doch keine Instanz oder?
-
@daniel sagte in Datei für Konstanten anlegen:
@manni66 Aber bei einer statischen Member Variable brauche ich doch keine Instanz oder?
Du brauchst aber ohne Instanz auch keine struct, oder?
-
muss kann man statische variablen nicht außerhalb initialisieren? also warum machst du die überhaupt statisch?