Klassenproblemchen



  • Hi, wie kann ich in einer Methode der Klasse foo, eine Funktion, die nicht zur Klasse gehört aufrufen ? Der Compiler sagt immer undeclared identifier



  • Bitte Beispielprogramm.



  • Hi!

    Versuchs doch mal so:

    class cfoo
    {
      void foo(){::ffoo();};
    }
    void ffoo(){};
    
    // oder
    
    namespace nfoo
    {
      class cfoo
      {
        void foo(){nfoo::ffoo();};
      }
      void ffoo(){};
    }
    

    Mit ::ffoo bist du wieder im Globalen Bereich und mit nfoo::ffoo sagt du der Funktion das die aufzurufende Funktion im Namensbereich nfoo liegt.

    Code-Hacker



  • also ich habe in fltk meine gui klasse. es gibt einen button update. der ruft die callback methode cb_update der guiklasse auf. in dieser methode will ich nun meinen winsock code unterbringen. aber wenn ich z.b. irgendeine winsock funktion aufrufe kommt undeclared identifier, obwohl alle header die ich brauch eingebunden sind, hab ich in einem externen programm schon getestet.



  • *push*



  • problemkind schrieb:

    *push*

    Ohne Code wird das wohl nichts. Denn wenn es schon in einem externen Programm läuft dann wird der Fehler wohl nicht da liegen wo du glaubst, dass er liegt.



  • [cpp]
    int checkupdate (void)
    {
    //jede menge code, hier aber nicht von bedeutung

    return 1;
    }

    class Fenster : Fl_Window
    {
    public:
    Fenster(int, int , const char *);
    ~Fenster();

    //callback
    static void cb_update(Fl_Button*, void*)
    {
    checkupdate();
    }
    };

    der compiler sagt:
    multiple definition of `checkupdate()'
    obwohl ich ganz sicher weiss dass es nur einmal definiert wird, hab nach checkupdate gesucht, kommt nur an den oben genannten stellen vor.



  • hast du es vielleicht in einer header datei implementiert und nicht geinlinet?

    Oder hast du 2 unterschiedliche Funktionen die nur zufällig gleich heissen?

    Oder hast du mal n schönes kompilierbares beispiel?



  • ja ist in einer header datei. warum muss ich die inlinen ?



  • tu die definition der funktion aus dem header heraus in eine (einzige!) implementierungsdatei und lass nur die funktionsdeklaration im header.
    denn (laut one definition rule) darf nur genau eine definition jeder nicht-inline funktion in einem programm vorhanden sein.
    oder mach die funktion inline (setz ein inline davor) und binde den header in jede datei ein, die die funktion benutzen soll.
    (kurz gefasst)



  • danke, schon wieder etwas dazu gelernt.


Log in to reply