Definition globaler Variable löst C2143 aus

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
stardust5383
Beiträge: 28
Registriert: 31. Oktober 2009 10:36

Definition globaler Variable löst C2143 aus

Beitrag von stardust5383 »

Ich habe in einer global.h meine Globalen Variablen folgendermaßen deklariert:

Code: Alles auswählen

#pragma once

#ifdef MODUL0
#define EXTERN
#else
#define EXTERN extern
#endif

#include <QtGui/QApplication>
#include "modulmain.h"
#include "ModuleConfig.h"

EXTERN ModulMain *wMain;
EXTERN ModuleConfig *wMainConfig;
in der Mainmethode instanziere ich beide mit

Code: Alles auswählen

wMain = new ModulMain;
wMainConfig = new ModuleConfig("Test");
Beim Kompilieren erhalte ich nun die Meldung:
1>c:\projekte\moduler\global.h(14) : error C2143: Syntaxfehler: Es fehlt ';' vor '*'
1>c:\projekte\moduler\global.h(14) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>c:\projekte\moduler\global.h(14) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
Kommentiere ich

Code: Alles auswählen

EXTERN ModuleConfig *wMainConfig;
aus, funktioniert es einwandfrei.

Was mache ich hier falsch?
kater
Beiträge: 306
Registriert: 29. Dezember 2009 01:13
Wohnort: Darmstadt

Beitrag von kater »

Versuch mal weg von globalen Variablen zu kommen.

Und du machst #define EXTERN. Und was ist EXTERN nun? Irgendwie garnichts. Und das gibt ein Fehler ;)
stardust5383
Beiträge: 28
Registriert: 31. Oktober 2009 10:36

Beitrag von stardust5383 »

Ich benötige die globale Variable um in allen Klassen Zugriff auf mein Hauptfenster zu erhalten. Da ich recht neu im Bereich C++ bin fehlt mir die Erfahrung. Immer das QWidget *parent durchreichen ist doch auch nicht sinnig oder?!

Das Beispiel mit #define EXTERN habe ich aus einem anderen Forum für die Deklaration externen Variablen. Der Fehler tritt ja auch nur bei dem zweiten Objekt auf. Wenn ich die Reihenfolge tausche rutscht der Fehler ja auch auf genau die besagte Zeile.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Durchreichen ist in jedem Fall schöner, als mit extern zu arbeiten. Ich denke aber, du brauchst nichtmal das.
Schau dir SIGNAL/SLOT an. Deine Widgets und anderen Objekte werden ja wahrscheinlich direkt im MainWindow instantiiert. Wenn du eine Statusänderung an dein MainWindow melden willst, emittierst du ein entsprechendes SIGNAL. Das MainWindow macht beim Erstellen des Objektes, und connectet die möglichen SIGNALS auf entsprechende SLOTS.So können dann auch gleich andere interessierte Zuhörer Änderungen mitbekommen.
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

Ich benötige die globale Variable um in allen Klassen Zugriff auf mein Hauptfenster zu erhalten.
ouch ouch ouch ....

DU baust klassen, die auf Fenster direkt zugreifen !?
Dann muessen die auch Ihr "fenster kennen" klar.

die Frage iss wo instanziierst du diese Klassen ? Global ?
oder in irgendeinem COntext ? Was ist der Context ? Sollte der Context nicht seine Widgets kennen, worauf er ausgaben erzeugt ?

also die Frage iss ...
Kannst du die Klassen so bauen, dass sie inner halb der widgets angelegt werden koennen ? dann kannst den Klassen doch easy das WIdget mitgeben.

Musst du aber die Klassen mit uanabhaengigen Lifecycle von den widgets erzeugen, solltest du tunlichst Fenster und Klasse(Logic Schicht in dem falle meist) trennen (Interfaces / genereischerer datenaustausch / Signale + Slots)!

Ciao ...
Antworten