Überladene Funktionen nutzlos?



  • nehmen wir mal an es gibt 2 Funktionen

    int foo(int a, int b)
    float foo(float a, float b)

    so nun wenn ich eine DLL oder ein Static-LIB erstelle, dann meckert der (MinGW) Compiler.

    Es geht nur, wenn ich normale C++ Programme (exe) schreibe.
    Nun meine Frage - macht es überhaupt Sinn überladene Funktionen zu erstellen - da bereits vor dem Ausführen feststeht welche Funktion genau ausgeführt wird...

    so kann man ja foo_int und foo_float funktionen erstellen - ist nur bisschen mehr Tipparbeit - aber dann gleich eindeutig...

    Was meint ihr?



  • An sich ja. Ist übersichtlicher..



  • Hallo

    Schreib doch eine Templatfunktion.

    chrische



  • TheShadow2000 schrieb:

    nehmen wir mal an es gibt 2 Funktionen

    so nun wenn ich eine DLL oder ein Static-LIB erstelle, dann meckert der (MinGW) Compiler.

    etwas detailiert...
    es soll kein problem sein



  • Kann es sein das bei den Funktionen in der dll "extern "C"" davorsteht?
    Wenn das der Fall sein sollte, kann es nicht funktionieren, da in diesem Fall C-Style verwendet wird. D.h. die Parameterliste wird hier bei der Namensgebung nicht berücksichtigt.



  • der DLL-Code sieht am Anfang so aus:

    #include <windows.h>

    #ifdef BUILD_DLL
    #define DLL_EXPORT __declspec(dllexport)
    #else
    #define DLL_EXPORT
    #endif

    sagt dir das was (ist eine vorlage von Code::Blocks)

    Naja zumindest mit Libs sollte das klappen... z.B. WxWidgets - als Lib und da gibt es viele überladene Funktionen - k.A. wie die das hingekriegt haben...



  • Ähm, wenn Du uns den kompletten Header-Kopf ohne die Funktionen lieferst, um die es geht, hilft das nicht 😉



  • OK 🙂

    int DLL_EXPORT foo(int a, int b)
    {
    }

    float DLL_EXPORT foo(float a, float b)
    {
    }

    wobei ich sehe, dass Code::Blocks schon selbst BUILD_DLL setzt.


  • Mod

    wieso glaubt eigentlich jeder, der sich hier mit seinem compiler rumärgert, die fehlermeldung des compilers käme nur zum spaß und hätte keine bedeutung? erst so ergeben sich diese threads mit zig posts in den nichts geklärt wird? g++ kennt kein __declspec. das könnte hier so aussehen:

    #ifdef BUILD_DLL
    #  ifdef __GNUC__
    #    define DLL_EXPORT __attribute__((dllexport))
    #  else
    #    define DLL_EXPORT __declspec(dllexport)
    #  endif
    #else
    #  define DLL_EXPORT
    #endif
    


  • camper schrieb:

    g++ kennt kein __declspec

    MinGW aber. Der Preprocessor wurde so modifiziert, dass da ein __attribute__ raus kommt.


  • Mod

    Ben04 schrieb:

    camper schrieb:

    g++ kennt kein __declspec

    MinGW aber. Der Preprocessor wurde so modifiziert, dass da ein __attribute__ raus kommt.

    ja, stimmt. was mich ja eigentlich noch bestätigt. kristallkugeln sind eben nicht sehr zuverlässig.


Anmelden zum Antworten