linken
-
ich include in 2 cpp`s eine klasse -> dann hab ich einen erro beim linken
Dlg_Optionen.obj : error LNK2005: "public: void __thiscall CSave::save(class ATL::CStringT<char,class StrTraitMFC<char,class ATL::ChTraitsCRT<char> > >)" (?save@CSave@@QAEXV?StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@@Z) already defined in AIDEDlg.obj
dann müsste die klasse ja schon bekannt sein und ich könnte ohne ein 2tes include
wieder objekte anlegen -> dachte ich, aber dann ist die klasse noch nicht bekanntversteh ich nicht
-
hi!
bin leider noch nicht so weit übers anfängerstadium hinaus. von daher weiss ich nicht, ob ich dir helfen kann..hab auch öfter probleme mit der ganzen includiererei.
ich komm aber meistens irgendwie klar, indem ich folgende regeln beachte:für jede klasse genau eine .h datei und eine .cpp datei (.h deklaration und .cpp implementation..)
include wächter verwenden!
die .cpp includiert nur die zugehörige .h datei.
das klappt fast immer ausser manchmal bei über kreuz includieren.
(klasse A includiert klasse B und B includiert A)irgendwann muss ich dazu auch noch mal was fragen...

-
das ist kein compilerfehelr(der code ist also korrekt) sondern ein linkerfehler, der besagt, dass du CSave::Save 2x implementiert hast.
-
oder daß die Funktion 2 Mal im Projekt eingebunden wurde und kein Guard existiert der das abfängt!?!
-
otze schrieb:
das ist kein compilerfehelr(der code ist also korrekt) sondern ein linkerfehler, der besagt, dass du CSave::Save 2x implementiert hast.
Dann ist es ja doch ein Fehler im Code...
Bye, TGGC (Demo or Die)
-
// AIDEDlg.cpp : Implementierungsdatei // #pragma once #include "stdafx.h" #include "AIDE.h" #include "AIDEDlg.h" #include ".\aidedlg.h" #ifdef _DEBUG #define new DEBUG_NEW #endif #include "CColour.h" #include "CSave.h" #include "COpen.h" #include "CMenue.h" #include "Dlg_Optionen.h" #include "Dlg_Info.h"und
// Dlg_Optionen.cpp : Implementierungsdatei // #pragma once #include "stdafx.h" #include "AIDE.h" #include "Dlg_Optionen.h" #include ".\dlg_optionen.h" #include "CMyFileDialog.h" #include "CSave.h"wie soll ich es anders lösen wenn ich in beiden die Klasse CSave benutzen möchte?
-
das müsste eigentlich so gehen...
hast du CSave::Save in beiden .cpp-dateien iumplementiert?
Hast du CSave::Save im Header CSave.h implementiert?
-
hast du vielleicht folgendes vergessen?
blub.h
//vor dem ifndef sollten max komentare stehn #ifndef BLUB_H #define BLUB_H definitionen(); #endif //nach dem endif sollte auch nichts stehn..danach sollte es keine probs mehr geben..