Definition und Deklaration eines Arrays einer Struktur in eine Header- und CPP-Datei trennen?
-
Hallo, wie der Titel bereits sagt beiße ich mir im Moment die Zähne an einer höchstwahrscheinlich einfachen Sache aus.
Ich möchte meinen Code etwas strukturieren und habe versucht ein Array der Struktur TC_ITEM aus der windows.h zu erstellun und dessen Deklaration und Definition in Header bzw. CPP-Dateien zu trennen.
In der Header-Datei steht nun Folgendes://GLOBALS_H extern TC_ITEM tcItem[10];
Und in der CPP-Datei dies:
//GLOBALS_CPP #include "globals.h" #include "windows.h" TC_ITEM tcItem[10]; tcItem[0].mask = TCIF_TEXT; tcItem[0].dwState = NULL; tcItem[0].dwStateMask = NULL; tcItem[0].pszText = szTab_0_Title; tcItem[0].cchTextMax = NULL; tcItem[0].iImage = NULL; tcItem[0].lParam = NULL; //...Restliche Initialisierungen...//
Allerdings wird vom Compiler immer angenommen, dass ich ein neues Array anlegen möchte. Ich will doch nur die Initialisierungen der einzelnen Elemente des Arrays vornehmen.
Schreibe ich diese Initialisierungen nämlich in die main.cpp, dann funktioniert es. Ich möchte es aber aus Gründen der Übersichtlichkeit in eine untergeordnete Datei packen.
Geht das in dieser Art und Weise überhaupt?
Was mache ich falsch?
Wie kann ich es zum Laufen bringen?Sitze schon eine ganze Weile an dem Problem und finde einfach keine Lösung. Ich kann mir durchaus vorstellen, dass diese denkbar naheliegend ist aber ich komme nicht darauf.
Ich bin für jede Hilfe dankbar.Gruß Honky
-
Dir ist sicher klar, dass man Anweisungen wie Zuweisungen nicht außerhalb einer Funktion stehen haben darf.
-
Hacker schrieb:
Dir ist sicher klar, dass man Anweisungen wie Zuweisungen nicht außerhalb einer Funktion stehen haben darf.
Nö nicht wirklich. Ich habe das Aufteilen und Strukturieren bisher immer ziemlich vernachlässigt.
Aber das erklärt glaube ich so einiges.
Aber wenn ich in die Header-Datei z.B. folgendes schreibe:
//HEADER extern int iVar;
Und in die CPP-Datei das:
//CPP int iVar = 10;
Dann funktioniert es doch auch. Und meines Erachtens ist das doch auch eine Zuweisung.
-
Es ist eine Definition mit Initialisierung.
-
314159265358979 schrieb:
Es ist eine Definition mit Initialisierung.
Du meinst "Deklaration" mit Initialisierung.
-
Nein.
-
Wenn ich mich richtig erinnere, geht das etwa so:
//GLOBALS_H extern TC_ITEM tcItem[10];
Und in der CPP-Datei dies:
//GLOBALS_CPP #include "globals.h" #include "windows.h" TC_ITEM tcItem[10] = {{.mask = TCIF_TEXT, .dwState = NULL, .dwStateMask = NULL, .pszText = szTab_0_Title, .cchTextMax = NULL, .iImage = NULL, .lParam = NULL}, {...}, ... };