Exceptions :(
-
Hallo Leute.
Ich habe den Code mal etwas bearbeitet, rahaskwa (wie auch immer) gab ihn mir auch.
Interessant ist folgendes:#include <iostream> using namespace std; class CException { public: CException(const char *LogType, const char *LogText, const char *FileName, unsigned int Line) { m_LogType = new char[strlen(m_LogType)]; m_LogText = new char[strlen(m_LogText)]; m_FileName = new char[strlen(m_FileName)]; strcpy(m_LogType, LogType); strcpy(m_LogText, LogText); strcpy(m_FileName, FileName); this->m_Line = Line; } // weitere Funktionen folgen char *m_LogType; char *m_LogText; char *m_FileName; int m_Line; }; void test(void) { throw CException(Error, "Fehler in der Test", __FILE__, __LINE__); } int main (void) { try { test (); } catch (CException Exception) { cout << "catch ist in CException" << endl; return 0; } catch (...) { cout << "catch ist in \"...\"" << endl; return 0; } return 0; }
wirft eine Exception nach (...).
,
aber:#include <iostream> using namespace std; class CException { public: CException(const char *LogType, const char *LogText, const char *FileName, unsigned int Line) {/* m_LogType = new char[strlen(m_LogType)]; m_LogText = new char[strlen(m_LogText)]; m_FileName = new char[strlen(m_FileName)]; strcpy(m_LogType, LogType); strcpy(m_LogText, LogText); strcpy(m_FileName, FileName);*/ this->m_Line = Line; } // weitere Funktionen folgen char *m_LogType; char *m_LogText; char *m_FileName; int m_Line; }; void test(void) { throw CException(Error, "Fehler in der Test", __FILE__, __LINE__); } int main (void) { try { test (); } catch (CException Exception) { cout << "catch ist in CException" << endl; return 0; } catch (...) { cout << "catch ist in \"...\"" << endl; return 0; } return 0; }
wirft eine Exception nach CException!
VIlleicht hilft das etwas weiter.
MfG MAV
-
Original erstellt von <fisch>:
**```cpp
CException(char *LogType, char *LogText, char *FileName, unsigned int Line)
{
m_LogType = LogType;
m_LogText = LogText;
m_FileName = FileName;
m_Line = Line;
}blubb, schlechte imitation von fisch
-
Ups, stimmt...
Das sollte auch für die anderen vars gelten...[ Dieser Beitrag wurde am 06.04.2003 um 20:09 Uhr von Mis2com editiert. ]
-
@Mis2com
Vielleicht solltest du nicht strlen mit uninitialisierten char-Zeigern aufrufen.
-
warum Noesis? ist der code falsch?
-
Wüsste ich auch gerne...
-
nö, ist korrekt. Wobei const char* besser wäre.
-
afair müssten das const char * zeiger sein, ich glaube mich erinnern zu können irgendwo mal gelesen zu haben, das c-strings, egal wo definiert, im ganzen programm gültig sind, sprich
const char *f () { return "Hallo"; }
ist afair erlaubt.
aber auf jedenfall zum string kopieren niemals den = operator verwenden, sondern schön brav zuerst mitchar *str = new char[strlen(other_str)+1];
speicher allokieren, dann
strcpy (str, other_str);
den string kopieren
und am ende mitdelete [] str;
den speicher wieder frei geben.
oder std::string verwenden
-
aber dann müsste man noch mehr ändern. weil const char* auf char* geht nicht.
-
Original erstellt von <the fisch fake>:
aber dann müsste man noch mehr ändern. weil const char auf char geht nicht.**Ja, dann müssten natürlich die member auch const char* sein und über die Initialisierungsliste des Konstruktors gesetzt werden.
[ Dieser Beitrag wurde am 06.04.2003 um 20:22 Uhr von DrGreenthumb editiert. ]