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


Anmelden zum Antworten