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 mit

    char *str = new char[strlen(other_str)+1];
    

    speicher allokieren, dann

    strcpy (str, other_str);
    

    den string kopieren
    und am ende mit

    delete [] 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. ]


Anmelden zum Antworten