Wo müssen structs untergebracht werden?
-
Hallo,
Wo müssen Strukturen platziert werden?
In der .h-Datei innerhalb oder außerhalb der Klasse?
Oder in der dazugehörigen .cpp-Datei wo die Funktionen darin stehen?Die structs sollen in ein paar Funktionen verwendet in der cpp-Datei.
typedef struct { unsigned char hour; unsigned char min; unsigned char sec; } StartTime;struct TIME { long id; StartTime stime; EndTime etime; }
-
Würd mal sagen structs gehören in eine .h-Datei, wenn du mal in das include-Archiev schaust werden dort auch alle structs im Header deklariert.
Lg Tobi
-
Wenn deine structs auch mal in anderen Übersetzungseinheiten benutzt werden können sollen, dann ist die einzig sinnvolle Variante natürlich: im Header! Sonst kommst du irgendwann noch auf die Idee, cpp-Dateien zu inkludieren (tut man niemals nicht!).

-
cpp_anfaenger schrieb:
typedef struct { unsigned char hour; unsigned char min; unsigned char sec; } StartTime;struct TIME { long id; StartTime stime; EndTime etime; }Die erste Version ist ziemlich altbackener C-Stil und in C++ einfach nicht (mehr) üblich. Du kannst stattdessen einfach
struct StartTime { unsigned char hour; unsigned char min; unsigned char sec; };schreiben.
-
Danke für Eure Hilfe!
Bekomme nun beim Kompilieren expected unqualified-id before >>public<< -Fehler
.h-Datei
private: int x; struct StartTime { unsigned char hour; unsigned char min; unsigned char sec; }; public: //hier meckert er MyClass(); public: ~MyClass(); int fkt_n();
-
Zeig doch mal den ganzen Header. Und nicht abschreiben sondern Copy & Paste.
Thx.
-
naja, du kannst die kosntruktoren usw. von MyClass nicht einfach so im raum sehen lassen. Da müsste schon noch die Klassendeklaration mit den entsprechenden geschweiften Klammern drumrum. Schau dir da am besten mal die entsprechenden Abschnitte im Buch/Tutorial deiner Wahl an...
-
Zusätzlich sollte man noch erwähnen, dass structs (in C++) Klassen sind. Es lediglich das Verhalten hinsichtlich der Öffentlichkeit von Attributen und Methoden ändert sich in der "Voreinstellung".
Ich persönlich packe alles, was zum Klassen-Interface (das was nach außen sichtbar sein muss) gehört, in eine Header-Datei (.h, .hpp). Implementierungsdetails landen in die entsprechende Sourcecode-Datei (.cpp).
Für den Fall, dass in der Sourcecode-Datei (und nur in dieser) Hilfsfunktionen oder Hilfsklassen/-strukturen benötigt werden, werden diese dort definiert.
Wird also die Struktur auch außerhalb deiner Klasse verwendet, so sollte diese in die Header-Datei (oder gar in eine eigene Header-Datei).
Grüße... Heiko
-
hatte das semicolon vergesen

struct x
{
...
};
-
cpp_anfaenger schrieb:
hatte das semicolon vergesen

struct x
{
...
};Aber hier hast du es mit Semikolon gepostet. Ist mir echt unverständlich, warum immer so viele ihren Code abtippen, anstatt das per C&P zu machen...

-
Wie greift man auf verschachtelte Strukturen zu?
struct Time { unsigned char hour; unsigned char min; unsigned char sec; }; struct Paket { Time begin; Time end; } int main() { Paket mypaket; mypaket.begin.hour = "8"; //?? return 0; }
-
Ja, passt an sich. Nur, dass du nicht versuchen solltest, einem unsigned char (steht für ein einzelnes Zeichen) eine Zeichenkette zuzuweisen. Also statt "8" notiere lieber '8'. Und beim zweiten struct hast du das Semikolon am Schluss vergessen.
EDIT: Und wenn ich mal eine Sekunde darüber nachdenke (
): dir ist dann auch klar, dass du nicht "12" in unsigned char hour unterbringen kannst, ja? Speicher sowas lieber in einer int-Variable.
-
_matze schrieb:
Ja, passt an sich. Nur, dass du nicht versuchen solltest, einem unsigned char (steht für ein einzelnes Zeichen) eine Zeichenkette zuzuweisen. Also statt "8" notiere lieber '8'. Und beim zweiten struct hast du das Semikolon am Schluss vergessen.
EDIT: Und wenn ich mal eine Sekunde darüber nachdenke (
): dir ist dann auch klar, dass du nicht "12" in unsigned char hour unterbringen kannst, ja? Speicher sowas lieber in einer int-Variable.Wann nutzt man short?
-
_matze schrieb:
Ja, passt an sich. Nur, dass du nicht versuchen solltest, einem unsigned char (steht für ein einzelnes Zeichen) eine Zeichenkette zuzuweisen. Also statt "8" notiere lieber '8'.
Oder gleich 8, als Zahl und nicht als Zeichen. Zwar sind Zeichenwerte unmittelbar umwandelbar in Zahlenwerte (bzw. werden automatisch umgewandelt vom Compiler), andererseits sind unsigned und signed chars allgemein eher Zahlen, während chars Zeichen sind. (und ja, char, signed char und unsigned char sind drei verschiedene Datentypen, im Gegensatz zu den Ganzzahltypen, wo der nicht weiter qualifizierte Typ gleich dem signed Typen ist.)