Seltsame Fehlermeldungen
-
Hallo Zusammen
Ich habe 2 Zeiger im h-File einer von mir erstellten Klasse deklariert.
Wenn ich das h-File nun im Fensterfile (....Dlg.cpp) include, erhalte ich vom Linker folgende Fehler:fatal error LNK1120: 1 unresolved externals
error LNK2005: "class CStringArray * pa_Projects" (?pa_Projects@@3PAVCStringArray@@A) already defined in TMG_Functions.obj
error LNK2005: "class CDatabase * po_DBConnect" (?po_DBConnect@@3PAVCDatabase@@A) already defined in TMG_Functions.obj
error LNK2001: unresolved external symbol "public: void __thiscall TMG_C_TimemanagerDlg::OnLbnSelchangeList1(void)" (?OnLbnSelchangeList1@TMG_C_TimemanagerDlg@@QAEXXZ)
Eine Suche im MSDN ergab mehrere Lösungsmöglichkeiten, welche aber keine Wirkung zeigten wie Projekteinstellungen, Bibliotheken bevorzugen usw.
Kennt jemand das Problem ?
Würde mich wie immer auf einen guten Ratschlag freuen.mfg el-loco
-
beam'e mal den inhalt deines headerfiles hier ins forum.
-
Hier mein Headerfile:
#pragma once #include "afxdb.h" class TMG_C_Functions { public: TMG_C_Functions(void); ~TMG_C_Functions(void); void Fv_DBConnect(void); void Fv_GetProjects(void); CString Fs_GetDescription(CString); void Fv_Time(void); }; CDatabase *po_DBConnect; CStringArray *pa_Projects;
mfg el-loco
-
Ich würde die Variablen mit in die Klasse packen - oder spricht was dagegen?
Weil so kommt die Meldung, sobald du die Datei mehr als einmal includierst.
-
Ja die Idee ist gut. Nur sobald ich die Pointer in die Klasse miteinbeziehe, sind sie gegen Aussen nicht sichtbar. (undeclared identifier)
Was mache ich falsch ?#pragma once #include "afxdb.h" class TMG_C_Functions { public: TMG_C_Functions(void); ~TMG_C_Functions(void); void Fv_DBConnect(void); void Fv_GetProjects(void); CString Fs_GetDescription(CString); void Fv_Time(void); CDatabase *po_DBConnect; CStringArray *pa_Projects; };
mfg el-loco
-
Dein Fehler ist dass du variablen in Headern declarierst. Das macht man nicht.
Was dabei rauskommt siehst du ja jetzt.schreib in den header
extern CDatabase *po_DBConnect; extern CStringArray *pa_Projects;
In deine main.cpp zu all den anderen globalen variablen kommt
CDatabase *po_DBConnect; CStringArray *pa_Projects;
Übrigens globale variablen sind pfui werden viele hier sagen.
Kurt
-
Hi Kurt
Danke für die Hilfe.
Habe deinen Vorschlag umgesetzt. Der Compiler zeigt folgendes:error C2071: 'TMG_C_Functions::pa_Projects' : illegal storage class
Ich verwende eine Klasse wo ich meine verschiedenen Funktionen reinschreibe. Im Header (functions.h) habe ich nun 2 Zeiger mit "extern" Definiert (in der Klasse). Verwendet werden diese Zeiger in Functions.cpp und ...Dlg.cpp. Dort habe ich die Pointer wie vorgeschlagen bekannt gemacht.
Als Anfänger blicke ich da "noch" nicht so ganz durch
.
mfg el-loco