exception handling between C and C++



  • Moin,

    ich habe eine C library, die im Prinzip aus nichts anderem als das hier besteht:

    void cppMethodCallBack(int functionPtr) {
        (*functionPtr) ();
    }
    

    Auf der C++ Seite wird die Lib eingebunden. Ich habe hierfür eine Klasse,
    die wiederum eine Methode ausserhalb der Klassenscopes hat:

    void raiseException() throw (std::logic_error) {
        throw std::logic_error::logic_error("blah blah..");
    }
    

    In der Klasse selbst wird beides verwendet:

    ...
    try { cppMethodCallBack(&raiseException); }
    catch (std::logic_error& e) { /*...*/ }
    catch (...) { /*...*/ }
    

    Dies alles um zu testen, ob das Printip an sich funtioniert.
    Nun melded gcc beim kompilieren des C++ Teils das hier:

    invalid type argument of 'unary *'....
    invalid conversion from 'void (*)() throw (std::logic_error)' to 'int'
    

    Was ist falsch?



  • bgdn schrieb:

    [...schwall...]
    Was ist falsch?

    Das eine Funktion kein int ist. Compilermeldungen lesen hilft einem da auch weiter...



  • Tachyon schrieb:

    bgdn schrieb:

    [...schwall...]
    Was ist falsch?

    Das eine Funktion kein int ist. Compilermeldungen lesen hilft einem da auch weiter...

    Und was ist bitte dann ein function pointer? Das IST ein int.



  • bgdn schrieb:

    Tachyon schrieb:

    bgdn schrieb:

    [...schwall...]
    Was ist falsch?

    Das eine Funktion kein int ist. Compilermeldungen lesen hilft einem da auch weiter...

    Und was ist bitte dann ein function pointer? Das IST ein int.

    Das sieht der Compiler (und der C++-Standard) wohl anders.



  • bgdn schrieb:

    Tachyon schrieb:

    bgdn schrieb:

    [...schwall...]
    Was ist falsch?

    Das eine Funktion kein int ist. Compilermeldungen lesen hilft einem da auch weiter...

    Und was ist bitte dann ein function pointer? Das IST ein int.

    Lies mal http://www.newty.de/fpt/index.html und dann sehen wir weiter, ok?



  • Wenn immer alle Leute so glug wären.
    Danke für Deine "Hilfe" Tachyon..

    Ich habe im C teil int functionPtr mit
    void (*functionPtr) () ersetz.
    Im C++ Teil:
    void (*f_ptr) () = &raiseException;
    udn f_ptr übergeben. Scheint zu gehen.



  • bgdn schrieb:

    Wenn immer alle Leute so glug wären.
    Danke für Deine "Hilfe" Tachyon...

    Die Ironie-"" kannst du getrost weglassen. Er hat dir in seinem ersten Post alle nötige Hilfe zukommen lassen. Dass du ihm das nicht geglaubt hast weil du von deiner falschen Annahme überzeugt warst ist ja nicht seine Schuld.


Anmelden zum Antworten