Benutzer mit den meisten Antworten
Globale Variablen

Frage
-
Hallo,
ich habe ein ziehmlich umfangreiches Projekt geschrieben.
Sprache: C++ MFC.
Ich brauche ein globales Feld, dynamisch erzeugt, wie double Höhenfeld[][] = new int[X][Y]
So konnte ich es nicht in der .h Datei erzeugen, zum Test ging dies: double Höhenfeld[300][214]
In dem einen Fenster (.cpp Datei) werden die Daten eingetragen.
Im anderen Fenstrer (.cpp Datei) werden die Daten benötigt.
Binde ich in beiden Fenstern (.cpp) die globale (.h Datei) ein, erhalte ich vom Linker eine Fehlermeldung wegen Neudefinition.
Definiere ich in nur einem Fenster .cpp das Höhenfeld, kennt das andere Fenster dieses nicht.
Wie kann ich Fensterübergreifend eine globale Variable verwenden?
Antworten
-
So geht das nicht. Der Compiler muss immer eine Dimension kennen.
Einzige Möglichekit ist ein jagged Arry.
double **lines = new double*[y]; for (int iLine=0; iLine<y; ++iLine) lines[iLine] = new double[x];
Aber warum nimmst Du nicht einen std::vector das ist noch einfacher:
typedef std::vector<double> T_LINE; typedef std::vector<T_LINE> T_FIELD;
@GreatVolk: Von der extern Lösung halte ich gar nichts. globale Variablen, passen einfach in kein Projekt-Design.
Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
- Bearbeitet Martin RichterModerator Freitag, 24. Februar 2012 07:47
- Als Antwort vorgeschlagen Martin RichterModerator Freitag, 24. Februar 2012 12:09
- Als Antwort markiert Robert BreitenhoferModerator Montag, 12. März 2012 15:09
-
- Als Antwort markiert Robert BreitenhoferModerator Montag, 12. März 2012 15:09
Alle Antworten
-
definiere es in einem Cpp-File mit:
double Höhenfeld[X][Y];
Im Headerfile mit
extern double Höhenfeld[X][Y];
Huch... Wozu das new? also... ich bezweifle das das geht, wenn zwei dimensionen variabel sein sollen...
- Bearbeitet GreatVolk Dienstag, 21. Februar 2012 18:31
-
So geht das nicht. Der Compiler muss immer eine Dimension kennen.
Einzige Möglichekit ist ein jagged Arry.
double **lines = new double*[y]; for (int iLine=0; iLine<y; ++iLine) lines[iLine] = new double[x];
Aber warum nimmst Du nicht einen std::vector das ist noch einfacher:
typedef std::vector<double> T_LINE; typedef std::vector<T_LINE> T_FIELD;
@GreatVolk: Von der extern Lösung halte ich gar nichts. globale Variablen, passen einfach in kein Projekt-Design.
Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
- Bearbeitet Martin RichterModerator Freitag, 24. Februar 2012 07:47
- Als Antwort vorgeschlagen Martin RichterModerator Freitag, 24. Februar 2012 12:09
- Als Antwort markiert Robert BreitenhoferModerator Montag, 12. März 2012 15:09
-
@GreatVolk: Von der extern Lösung halte ich gar nichts. globale Variablen, passen einfach in kein Projekt-Design.
Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
:D Er wollte ja wissen, wie das mit globalen Variablen geht - und es nicht gewertet bekommen. Trotzdem stimme ich Dir für die meisten Fälle voll und ganz zu :)
-
So geht das nicht. Der Compiler muss immer eine Dimension kennen.
Einzige Möglichekit ist ein jagged Arry.
double **lines = new double*[y]; for (int iLine=0; iLine<y; ++iLine) lines[iLine] = new double[x];
Aber warum nimmst Du nicht einen std::vector das ist noch einfacher:
typedef std::vector<double> T_LINE; typedef std::vector<T_LINE> T_FIELD;
@GreatVolk: Von der extern Lösung halte ich gar nichts. globale Variablen, passen einfach in kein Projekt-Design.
Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
Ich habs jetzt mit "vector" ausprobiert.
Die Compilermeldung war: "errorC2039:´vector´:Ist kein Element von `std`
Gruß
Didi
-
- Als Antwort markiert Robert BreitenhoferModerator Montag, 12. März 2012 15:09
-
Hallo didi369,
Ich gehe davon aus, dass die Antworten Dir weitergeholfen haben.
Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.Grüße,
Robert
Robert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.