Fehler bei Klasse in eigener Datei
-
Hi,
ich habe an einer Klasse gearbeitet, die bis jetzt in der gleichen Datei wie die main()-Funktion war. Nun wollte ich die Klasse in einer eigenen Datei haben, aber da gibt es sehr viele Probleme. Da der Code ein bisschen zu lang und die Fehler zu viele sind, um sie hier zu posten, habe ich das gesamte VC++-Projekt auf einen Server geladen.
Wer möchte kann sich das ja mal anschauen...[url] www.lanwarscript.space4free.net/filehandling.zip [/url]
MfG, Neo2k3
-
Habe folgendes in FileHandling.cpp gefunden
#include "myheader.h" #include "InOut.cpp" #include "Evaluation.cpp"Implementation Files werden nicht includiert. Habe mir den gesamtem code nicht angesehen. Das dürfte aber dein Problem sein.
Kurt
-
Dadurch konnte ich die Fehleranzahl zwar etwas eindämmen, aber es will trotzdem noch nicht so recht.
Ich habe in FileHandling.cpp die includings gelöscht - bis auf "myheader.h". In den anderen .cpp-Files habe ich "myheader.h" hinzugefügt.
-
Na dann sag mal welche Fehlermeldungen noch kommen.
Kurt
-
ich schreib jetzt mal etwas ungeordnet was mir zu dem code einfällt:
InOut.cpp
//InOut::InOut(const std::string TempPfad) //wenn du den Parameter per Wert übergibst, //wird der ganze String unnötigerweise kopiert //eine Referenz reicht völlig: InOut::InOut(const std::string& TempPfad) //{ // Pfad = TempPfad; //} //Memberobjekte werden so initialisiert, wie es in der //Initialisierungsliste steht. In deinem Fall wird Pfad //also mit std::string("") initialisiert und später der //operator=() aufgerufen. Initialisiere die Variable gleich, um //eine Operation einzusparen: : Pfad(TempPfad) {}Filehandling.cpp:
- die "#include onout.cpp" mit "#include inout.h" ersetzen, ebenso bei der anderen datei
- Die Klasse "File" in einem eigenen header definieren udn in einer eigenen cpp implementieren
myheader.h und Evaluation.h:
- in Evaluation.h ist das struct stats nicht bekannt. es müsste daher myheader.h includiert werden.
ABER:
myheader.h ist eigentlich ziemlich sinnlos. packe die definition des structs mit in evaluation.h (hat ja ne menge damit zu tun; vielleicht packst dus als subklasse public IN die Klassendefinition von Evaluation)
Die Art "ich includiere einfach mal alles was ich irgendwo brauche in einem zentralen Header" ist eine Unart, die bestenfalls die compilierung unnötig verlangsamt, schlimmstenfalls aber zu aufgeblähtem code führt und alles furchtbar unüberschtlich macht. Includiere das was du brauchst genau dort wo du es brauchst. eigene header vorzugsweise in den cpp-dateien, wenn sie nicht unnötig in den headern benötigt werden (wenn man im header nur die existenz einer klasse braucht, nicht aber ihre methoden, reicht eine forward-deklaration).und: wenn du hier um hilfe fragst, weil dein compiler fehlermeldungen ausspuckt, ist es immer sinnvoll, diese fehlermeldungen mit zu posten. Das gibt nämlich schonmal einen guten vorgechmack, wo es hakt...
-
ok danke, dass ihr euch Zeit genommen habt.

Klappt jetzt alles. Allerdings habe ich noch 9 Warnmeldungen, die die Vektoren betreffen. Ich weiss aber nicht wie ich sie beheben kann.Kompilierung läuft...
Evaluation.cpp
c:\programme\microsoft visual studio\vc98\include\vector(39) : warning C4786: 'std::reverse_iterator,std::allocator > const *,std::basic_string,std::allocator >,std::basic_string,std::allocator > const &,std::basic_string,std::allocator > const *,int>' : Bezeichner wurde auf '255' Zeichen in den Debug-Informationen reduziert
c:\programme\microsoft visual studio\vc98\include\vector(39) : Bei der Kompilierung der Member-Funktion '__thiscall std::vector,std::allocator >,std::allocator,std::allocator > > >::std::vector,std::allocator >,std::allocator,std::allocator > > >(const std::allocator,std::allocator > > &)' der Klassenvorlage
c:\programme\microsoft visual studio\vc98\include\vector(39) : warning C4786: 'std::reverse_iterator,std::allocator > *,std::basic_string,std::allocator >,std::basic_string,std::allocator > &,std::basic_string,std::allocator > *,int>' : Bezeichner wurde auf '255' Zeichen in den Debug-Informationen reduziert
c:\programme\microsoft visual studio\vc98\include\vector(39) : Bei der Kompilierung der Member-Funktion '__thiscall std::vector,std::allocator >,std::allocator,std::allocator > > >::std::vector,std::allocator >,std::allocator,std::allocator > > >(const std::allocator,std::allocator > > &)' der Klassenvorlage
FileHandling.cpp
c:\programme\microsoft visual studio\vc98\include\vector(39) : warning C4786: 'std::vector,std::allocator >,std::allocator,std::allocator > > >::vector,std::allocator >,std::allocator,std::allocator > > >' : Bezeichner wurde auf '255' Zeichen in den Debug-Informationen verkürzt
c:\programme\microsoft visual studio\vc98\include\vector(52) : warning C4786: 'std::vector,std::allocator >,std::allocator,std::allocator > > >::vector,std::allocator >,std::allocator,std::allocator > > >' : Bezeichner wurde auf '255' Zeichen in den Debug-Informationen verkürzt
c:\programme\microsoft visual studio\vc98\include\vector(60) : warning C4786: 'std::vector,std::allocator >,std::allocator,std::allocator > > >::~vector,std::allocator >,std::allocator,std::allocator > > >' : Bezeichner wurde auf '255' Zeichen in den Debug-Informationen verkürzt
c:\programme\microsoft visual studio\vc98\include\vector(39) : warning C4786: 'std::reverse_iterator,std::allocator > const *,std::basic_string,std::allocator >,std::basic_string,std::allocator > const &,std::basic_string,std::allocator > const *,int>' : Bezeichner wurde auf '255' Zeichen in den Debug-Informationen reduziert
c:\programme\microsoft visual studio\vc98\include\vector(39) : Bei der Kompilierung der Member-Funktion '__thiscall std::vector,std::allocator >,std::allocator,std::allocator > > >::std::vector,std::allocator >,std::allocator,std::allocator > > >(const std::allocator,std::allocator > > &)' der Klassenvorlage
c:\programme\microsoft visual studio\vc98\include\vector(39) : warning C4786: 'std::reverse_iterator,std::allocator > *,std::basic_string,std::allocator >,std::basic_string,std::allocator > &,std::basic_string,std::allocator > *,int>' : Bezeichner wurde auf '255' Zeichen in den Debug-Informationen reduziert
c:\programme\microsoft visual studio\vc98\include\vector(39) : Bei der Kompilierung der Member-Funktion '__thiscall std::vector,std::allocator >,std::allocator,std::allocator > > >::std::vector,std::allocator >,std::allocator,std::allocator > > >(const std::allocator,std::allocator > > &)' der Klassenvorlage
InOut.cpp
c:\programme\microsoft visual studio\vc98\include\vector(39) : warning C4786: 'std::vector,std::allocator >,std::allocator,std::allocator > > >::vector,std::allocator >,std::allocator,std::allocator > > >' : Bezeichner wurde auf '255' Zeichen in den Debug-Informationen verkürzt
c:\programme\microsoft visual studio\vc98\include\vector(60) : warning C4786: 'std::vector,std::allocator >,std::allocator,std::allocator > > >::~vector,std::allocator >,std::allocator,std::allocator > > >' : Bezeichner wurde auf '255' Zeichen in den Debug-Informationen verkürzt
Linker-Vorgang läuft...Also in meiner Dokumentation steht, dass dies nur den Bezeichner im Debugmodus betrifft, aber alles was hier über 255 Zeichen ist, sind die Inhalte.
-
PS: Hab das Projekt neu hochgeladen, Link steht oben
-
Neo2k3 schrieb:
Allerdings habe ich noch 9 Warnmeldungen, die die Vektoren betreffen. Ich weiss aber nicht wie ich sie beheben kann.
Das kannst du nicht beheben. Wie du schon gesagt hast das liegt daran das Debug-symbole bei VC nur 255 zeichen lang sein können. Wenn Du STL verwendest bekommst du aber längere Symbole.
Das einzige was du machen kannst ist diese Warnungen zu unterdrücken mit#pragma warning(disable:4786)Kurt
-
Diese Meldungen kannst/musst du ignorieren. Im Rahmen der STL wird die maximale
Bezeichnerlänge überschritten.
Das KANN zu Problemen für den Debugger führen hat aber sonst keinen Einfluss
auf dein Programm.
-
Jo danke, klappt.
