LNK1169 wegen Speicherzuweisung im Konstruktor



  • Servus,
    ich habe mir untenstehendes geschrieben.
    Mein Problem ist die Fehlermeldung:
    fatal error LNK1169: Ein oder mehrere mehrfach definierte Symbole gefunden

    Ich vermute, dass es deshalb nicht funktioniert, weil ich im Konstruktor Speicher an den Zeiger zuweise. Ich bin mir aber nicht sicher, da es ja auch verschiedene Objekte sind, die erstellt werden.

    Meine Fragen:
    Stimmt was ich mir zusammengereimt habe
    und wie kann ich das verhindern

    // Bibliothek zur Ausgabe der Testdaten in einer Tabelle
    
    #include "stdafx.h"
    
    #include <vector>
    #include <afx.h>
    #include "CSpreadSheet.h"
    
    using namespace std;
    
    class Ausgabe
    {
    public:
    	int Auslesen(int n);
    	int DateiKopieren(string Filename);
    	BOOL TabelleAnzeigen(CListCtrl* List,int n);
    
    	Ausgabe(string Filename);
    	~Ausgabe();
    
    	CString Hersteller,Typ,Nennspannung,Nennstrom,Pack,Kommentar;
    	CString str_StatIGBTRth,str_StatDiodeRth,str_StatModulRth;
    	vector<double> vc_TransIGBTRth,vc_TransIGBTTau,vc_TransDiodeRth,vc_TransDiodeTau;
    
    	double d_StatIGBTUt,d_StatIGBTrt,d_StatDiodeUt,d_StatDiodert;
    
    	CString LastError;
    	CSpreadSheet *Sheet;
    };
    
    //Öffnet die angegebene Datei für weitere Bearbeitung
    Ausgabe::Ausgabe(string Filename) : Sheet(NULL)
    {
    	Sheet = new CSpreadSheet(Filename.c_str(),";",FALSE);
    	//CSpreadSheet Sheet(Filename.c_str(),";",FALSE);
    	//LastError = Sheet->GetLastError();
    }
    
    Ausgabe::~Ausgabe()
    {
    	delete Sheet;
    }
    

  • Mod

    Das liegt nicht daran. Kann es sein, dass Du die angegebene Funktion tatsächlich mehrfach definiert hast?
    Hast Du evtl. die CPP Datei in ein anderes Modul per #include eingefügt?

    Wir lautet die Meldung genau?



  • Linker-Vorgang läuft...
    ChVersimFilesView.obj : error LNK2005: "public: __thiscall CSpreadSheet::CSpreadSheet(class CString,class CString,bool)" (??0CSpreadSheet@@QAE@VCString@@0_N@Z) bereits in Ausgabe.obj definiert
    ChVersimFilesView.obj : error LNK2005: "public: __thiscall CSpreadSheet::~CSpreadSheet(void)" (??1CSpreadSheet@@QAE@XZ) bereits in Ausgabe.obj definiert
    ChVersimFilesView.obj : error LNK2005: "public: bool __thiscall CSpreadSheet::AddHeaders(class CStringArray &,bool)" (?AddHeaders@CSpreadSheet@@QAE_NAAVCStringArray@@_N@Z) bereits in Ausgabe.obj definiert
    ChVersimFilesView.obj : error LNK2005: "public: bool __thiscall CSpreadSheet::DeleteSheet(void)" (?DeleteSheet@CSpreadSheet@@QAE_NXZ) bereits in Ausgabe.obj definiert
    ChVersimFilesView.obj : error LNK2005: "public: bool __thiscall CSpreadSheet::DeleteSheet(class CString)" (?DeleteSheet@CSpreadSheet@@QAE_NVCString@@@Z) bereits in Ausgabe.obj definiert
    ChVersimFilesView.obj : error LNK2005: "public: bool __thiscall CSpreadSheet::AddRow(class CStringArray &,long,bool)" (?AddRow@CSpreadSheet@@QAE_NAAVCStringArray@@J_N@Z) bereits in Ausgabe.obj definiert
    ChVersimFilesView.obj : error LNK2005: "public: bool __thiscall CSpreadSheet::AddCell(class CString,class CString,long,bool)" (?AddCell@CSpreadSheet@@QAE_NVCString@@0J_N@Z) bereits in Ausgabe.obj definiert
    ChVersimFilesView.obj : error LNK2005: "public: bool __thiscall CSpreadSheet::AddCell(class CString,short,long)" (?AddCell@CSpreadSheet@@QAE_NVCString@@FJ@Z) bereits in Ausgabe.obj definiert
    ChVersimFilesView.obj : error LNK2005: "public: bool __thiscall CSpreadSheet::ReplaceRows(class CStringArray &,class CStringArray &)" (?ReplaceRows@CSpreadSheet@@QAE_NAAVCStringArray@@0@Z) bereits in Ausgabe.obj definiert
    ChVersimFilesView.obj : error LNK2005: "public: bool __thiscall CSpreadSheet::ReadRow(class CStringArray &,long)" (?ReadRow@CSpreadSheet@@QAE_NAAVCStringArray@@J@Z) bereits in Ausgabe.obj definiert
    ChVersimFilesView.obj : error LNK2005: "public: bool __thiscall CSpreadSheet::ReadColumn(class CStringArray &,class CString,bool)" (?ReadColumn@CSpreadSheet@@QAE_NAAVCStringArray@@VCString@@_N@Z) bereits in Ausgabe.obj definiert
    ChVersimFilesView.obj : error LNK2005: "public: bool __thiscall CSpreadSheet::ReadColumn(class CStringArray &,short)" (?ReadColumn@CSpreadSheet@@QAE_NAAVCStringArray@@F@Z) bereits in Ausgabe.obj definiert
    ChVersimFilesView.obj : error LNK2005: "public: bool __thiscall CSpreadSheet::ReadCell(class CString &,class CString,long,bool)" (?ReadCell@CSpreadSheet@@QAE_NAAVCString@@V2@J_N@Z) bereits in Ausgabe.obj definiert
    ChVersimFilesView.obj : error LNK2005: "public: bool __thiscall CSpreadSheet::ReadCell(class CString &,short,long)" (?ReadCell@CSpreadSheet@@QAE_NAAVCString@@FJ@Z) bereits in Ausgabe.obj definiert
    ChVersimFilesView.obj : error LNK2005: "public: void __thiscall CSpreadSheet::BeginTransaction(void)" (?BeginTransaction@CSpreadSheet@@QAEXXZ) bereits in Ausgabe.obj definiert
    ChVersimFilesView.obj : error LNK2005: "public: bool __thiscall CSpreadSheet::Commit(void)" (?Commit@CSpreadSheet@@QAE_NXZ) bereits in Ausgabe.obj definiert
    ChVersimFilesView.obj : error LNK2005: "public: bool __thiscall CSpreadSheet::RollBack(void)" (?RollBack@CSpreadSheet@@QAE_NXZ) bereits in Ausgabe.obj definiert
    ChVersimFilesView.obj : error LNK2005: "public: bool __thiscall CSpreadSheet::Convert(class CString)" (?Convert@CSpreadSheet@@QAE_NVCString@@@Z) bereits in Ausgabe.obj definiert
    ChVersimFilesView.obj : error LNK2005: "private: bool __thiscall CSpreadSheet::Open(void)" (?Open@CSpreadSheet@@AAE_NXZ) bereits in Ausgabe.obj definiert
    ChVersimFilesView.obj : error LNK2005: "private: short __thiscall CSpreadSheet::CalculateColumnNumber(class CString,bool)" (?CalculateColumnNumber@CSpreadSheet@@AAEFVCString@@_N@Z) bereits in Ausgabe.obj definiert
    ChVersimFilesView.obj : error LNK2005: "private: void __thiscall CSpreadSheet::GetExcelDriver(void)" (?GetExcelDriver@CSpreadSheet@@AAEXXZ) bereits in Ausgabe.obj definiert
    LeftView.obj : error LNK2005: "public: __thiscall CSpreadSheet::CSpreadSheet(class CString,class CString,bool)" (??0CSpreadSheet@@QAE@VCString@@0_N@Z) bereits in Ausgabe.obj definiert
    LeftView.obj : error LNK2005: "public: __thiscall CSpreadSheet::~CSpreadSheet(void)" (??1CSpreadSheet@@QAE@XZ) bereits in Ausgabe.obj definiert
    LeftView.obj : error LNK2005: "public: bool __thiscall CSpreadSheet::AddHeaders(class CStringArray &,bool)" (?AddHeaders@CSpreadSheet@@QAE_NAAVCStringArray@@_N@Z) bereits in Ausgabe.obj definiert
    LeftView.obj : error LNK2005: "public: bool __thiscall CSpreadSheet::DeleteSheet(void)" (?DeleteSheet@CSpreadSheet@@QAE_NXZ) bereits in Ausgabe.obj definiert
    LeftView.obj : error LNK2005: "public: bool __thiscall CSpreadSheet::DeleteSheet(class CString)" (?DeleteSheet@CSpreadSheet@@QAE_NVCString@@@Z) bereits in Ausgabe.obj definiert
    LeftView.obj : error LNK2005: "public: bool __thiscall CSpreadSheet::AddRow(class CStringArray &,long,bool)" (?AddRow@CSpreadSheet@@QAE_NAAVCStringArray@@J_N@Z) bereits in Ausgabe.obj definiert
    LeftView.obj : error LNK2005: "public: bool __thiscall CSpreadSheet::AddCell(class CString,class CString,long,bool)" (?AddCell@CSpreadSheet@@QAE_NVCString@@0J_N@Z) bereits in Ausgabe.obj definiert
    LeftView.obj : error LNK2005: "public: bool __thiscall CSpreadSheet::AddCell(class CString,short,long)" (?AddCell@CSpreadSheet@@QAE_NVCString@@FJ@Z) bereits in Ausgabe.obj definiert
    LeftView.obj : error LNK2005: "public: bool __thiscall CSpreadSheet::ReplaceRows(class CStringArray &,class CStringArray &)" (?ReplaceRows@CSpreadSheet@@QAE_NAAVCStringArray@@0@Z) bereits in Ausgabe.obj definiert
    LeftView.obj : error LNK2005: "public: bool __thiscall CSpreadSheet::ReadRow(class CStringArray &,long)" (?ReadRow@CSpreadSheet@@QAE_NAAVCStringArray@@J@Z) bereits in Ausgabe.obj definiert
    LeftView.obj : error LNK2005: "public: bool __thiscall CSpreadSheet::ReadColumn(class CStringArray &,class CString,bool)" (?ReadColumn@CSpreadSheet@@QAE_NAAVCStringArray@@VCString@@_N@Z) bereits in Ausgabe.obj definiert
    LeftView.obj : error LNK2005: "public: bool __thiscall CSpreadSheet::ReadColumn(class CStringArray &,short)" (?ReadColumn@CSpreadSheet@@QAE_NAAVCStringArray@@F@Z) bereits in Ausgabe.obj definiert
    LeftView.obj : error LNK2005: "public: bool __thiscall CSpreadSheet::ReadCell(class CString &,class CString,long,bool)" (?ReadCell@CSpreadSheet@@QAE_NAAVCString@@V2@J_N@Z) bereits in Ausgabe.obj definiert
    LeftView.obj : error LNK2005: "public: bool __thiscall CSpreadSheet::ReadCell(class CString &,short,long)" (?ReadCell@CSpreadSheet@@QAE_NAAVCString@@FJ@Z) bereits in Ausgabe.obj definiert
    LeftView.obj : error LNK2005: "public: void __thiscall CSpreadSheet::BeginTransaction(void)" (?BeginTransaction@CSpreadSheet@@QAEXXZ) bereits in Ausgabe.obj definiert
    LeftView.obj : error LNK2005: "public: bool __thiscall CSpreadSheet::Commit(void)" (?Commit@CSpreadSheet@@QAE_NXZ) bereits in Ausgabe.obj definiert
    LeftView.obj : error LNK2005: "public: bool __thiscall CSpreadSheet::RollBack(void)" (?RollBack@CSpreadSheet@@QAE_NXZ) bereits in Ausgabe.obj definiert
    LeftView.obj : error LNK2005: "public: bool __thiscall CSpreadSheet::Convert(class CString)" (?Convert@CSpreadSheet@@QAE_NVCString@@@Z) bereits in Ausgabe.obj definiert
    LeftView.obj : error LNK2005: "private: bool __thiscall CSpreadSheet::Open(void)" (?Open@CSpreadSheet@@AAE_NXZ) bereits in Ausgabe.obj definiert
    LeftView.obj : error LNK2005: "private: short __thiscall CSpreadSheet::CalculateColumnNumber(class CString,bool)" (?CalculateColumnNumber@CSpreadSheet@@AAEFVCString@@_N@Z) bereits in Ausgabe.obj definiert
    LeftView.obj : error LNK2005: "private: void __thiscall CSpreadSheet::GetExcelDriver(void)" (?GetExcelDriver@CSpreadSheet@@AAEXXZ) bereits in Ausgabe.obj definiert
    Debug/ChVersimFiles.exe : fatal error LNK1169: Ein oder mehrere mehrfach definierte Symbole gefunden
    Fehler beim Ausführen von link.exe.
    
    ChVersimFiles.exe - 43 Fehler, 0 Warnung(en)
    

    CSpreadSheet.h -> Ausgabe.h -> LeftView.h und ChVersimFilesView.h
    cpp einbinden mach ich nicht, zumindest nicht bewusst.


  • Mod

    Und wie ist CSpreadSheet::CSpreadSheet definiert in cspreadsheet.h?
    Wahrschienlich nicht in der Klasse selbst, sondern danach und inline wurde nicht angegeben!



  • Ich hab jetzt alles Inline gemacht, was angemerkt wurde. Vielleicht kein sauberer Weg, aber klappt.

    Vielen Dank



  • Nein, wirklich sauber ist es nicht. Besser du lässt im Header NUR die Deklarationen stehen und lagerst die Funktionsdefinitionen aus in die zugehörige CPP-Datei.



  • Hab ich gemacht, ist ja der Grundaufbau bei einem neu angelegten Projekt.


  • Mod

    Kann nicht sein. Dann hättest Du den Linker Fehler nicht.
    Der Konstruktor und die anderen Funktionen sind zweimal in Deinen Files definiert!


Anmelden zum Antworten