globale Variablen und LNK4006 Fehler
-
Hi,
ich habe die globalen Variablen einfach in einer Headerdatei definiert, die zu einem Dialogfenster gehört. Das ganze sieht dann so hier aus:
#if !defined(AFX_PARAMETER_H__DD0FA3C6_9E13_4162_B0C2_C59322F65BBE__INCLUDED_) #define AFX_PARAMETER_H__DD0FA3C6_9E13_4162_B0C2_C59322F65BBE__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 // Parameter.h : Header-Datei // ///////////////////////////////////////////////////////////////////////////// // Dialogfeld CParameter double XMin=-5; double YMin=-5; double XMax=5; double YMax=5; int Feldgroesse; // ist dem n in der Formel gleichzusetzen double x[100]; // x Feld double y[100]; // y Feld class CParameter : public CDialog ..................Aber ich werde das ganze mal in der stdafx.h deklarieren, mal sehen was da passiert.
CU

-
Jo, mach die dort extern und in genau einer cpp-Datei machst du sie so, wie du sie jetzt in der Headerdatei hast.
-
So hab ich jetzt so gemacht:
neue Datei mit Namen "Variablen.cpp" angelegt und folgendes reingeschrieben:
double XMin=-5; double YMin=-5; double XMax=5; double YMax=5; int Feldgroesse; // ist dem n in der Formel gleichzusetzen double x[100]; // x Feld double y[100]; // y FeldSo diese Datei habe ich dann überall included, wo ich sie halt brauchte. Nun kommen nur noch 9 Warnungen
--------------------Konfiguration: Regression - Win32 Debug--------------------
Kompilierung läuft...
ChildView.cpp
Linker-Vorgang läuft...
LINK : warning LNK4075: /INCREMENTAL wird aufgrund der Angabe von /FORCE ignoriert
Parameter.obj : warning LNK4006: "double YMax" (?YMax@@3NA) bereits in ChildView.obj definiert; zweite Definition wird ignoriert
Parameter.obj : warning LNK4006: "double XMax" (?XMax@@3NA) bereits in ChildView.obj definiert; zweite Definition wird ignoriert
Parameter.obj : warning LNK4006: "double YMin" (?YMin@@3NA) bereits in ChildView.obj definiert; zweite Definition wird ignoriert
Parameter.obj : warning LNK4006: "double XMin" (?XMin@@3NA) bereits in ChildView.obj definiert; zweite Definition wird ignoriert
Parameter.obj : warning LNK4006: "int Feldgroesse" (?Feldgroesse@@3HA) bereits in ChildView.obj definiert; zweite Definition wird ignoriert
Parameter.obj : warning LNK4006: "double * x" (?x@@3PANA) bereits in ChildView.obj definiert; zweite Definition wird ignoriert
Parameter.obj : warning LNK4006: "double * y" (?y@@3PANA) bereits in ChildView.obj definiert; zweite Definition wird ignoriert
Debug/Regression.exe : warning LNK4088: Anwendung wurde gemaess der Option /FORCE generiert; Anwendung kann vielleicht nicht ausgefuehrt werdenRegression.exe - 0 Fehler, 9 Warnung(en)
Also irgendetwas stimmt da noch nicht so richtig.
CU

-
äh.
hab ich was von inkludieren der cpp-Datei gesagt?!
-
Sorry, habe wohl zu schnell gelesen!
CU

-
So irgendwie will das noch nicht klappen.
Habe eine externe Datei mit Namen Variablen.cpp angelegt und den ganzen Quatsch dort rein kopiert.
Nur wenn ich die Datei nicht includen soll, wie finden dann die anderen cpp-Dateien die Deklarationen?
Logischerweise kommen jetzt 119 Fehler weil die Variablen nicht gefunden werden!
CU

-
Hast du sie in der Headerdatei, die alle einbinden als extern deklariert? Hast du die Headerdatei auch in die Variablen.cpp eingebunden?
-
hast du in der variablen.cpp auch
die header datei mitincludiert,
wo die definitionen drinstehen?header.h
extern int xy;
cpp.h
include "header.h"
int xy = 5;aber wenn du das ganze in die stdafx.h/cpp packen würdest müsstest du keine extra datei erstellen und die variablen wären überall im programm erreichbar.
außerdem musst du in der cpp datei auch noch die stdafx.h includen, weil sonst der compiler durcheinander kommt.
-
Machs mal anders. Keine globalen Variablen.
UNd wenn du jetzt sagst das du das nur ausnahmsweise bei diesem Projekt machst glaube ich dir das nicht.
-
Also daß mit dem externen Deklarieren will nicht so richtig klappen oder ich bin zu dumm. Es spielt keine Rolle, ob die der ganze Mist in der stdafx.h oder in irgendeiner anderen Header-Datei steht. Es kommen jedesmal die selben Fehler. Ich werd' es mal so probieren wie Unix-Tom es gesagt hat.
CU

-
Gut, funktioniert jetzt irgendie doch! Bin ich happy
Danke
CU
