struct und funktionszeiger in anderer datei aufrufen



  • Hallo leute, ich arbeite derzeitig mit funktionszeiger!
    Wollt ein kleines programm machen, bekomm das aber nich hin!
    Mein Problem ist, das ich eben alles in verschiedene Dateien verteilen will...aber der zugriff funktioniert nicht!

    [FM.h]

    FM.H
    
    #ifndef FMH
    #define FMH
    struct sF
    {
     char* c_string;
     void (*funktion)();
    };
    
    void InitManager();
    void test();
    
    //---------------------------------------------------------------------------
    #endif
    

    [FM.cpp]

    #pragma hdrstop
    #include <iostream>
    #include <conio>
    #include <string>
    #include <iomanip>
    #include <utility>
    #include "FM.h"
    #include "Console.h"
    using namespace std;
    //---------------------------------------------------------------------------
    
    void InitManager()
    {
     FM[0].c_string="test";
     FM[0].funktion=test;
    }
    
    void test()
    {
     cout<<"Initialisierung des FuMa ---- ok"<<endl;
     cout<<"Funktionsschnittstelle funktionsbereit"<<endl;
    }
    
    #pragma package(smart_init)
    

    [console.cpp]

    #include <vcl.h>
    #pragma hdrstop
    #include <iostream>
    #include <conio>
    #include <string>
    #include <iomanip>
    #include <utility>
    #include "Console.h"
    #include "FM.h"
    using namespace std;
    
    //---------------------------------------------------------------------------
    
    #pragma argsused
    int main(int argc, char* argv[])
    {
    
     InitManager();
     FM[0].funktion();
     getch();        return 0;
    }
    

    in der console.cpp möcht ich eben die per funktionszeiger übergebene funktion aufrufen!

    Doch wo muss ich ein Objekt der structur erzeugen damit das funktioniert??



    1. Wie lauten die Fehlermeldungen des Compilers?
    2. Was ist 'FM[0]'? Das wurde nirgends deklariert.
    3. (unwichtiger) Hast du wohl vorher bereits länger C programmiert? ^^

    Du müsstest wohl ein globales Array FM vom Typ deiner Struktur anlegen, dann dürfte es funktionieren wie gewünscht.
    Weil das anscheinend nur eine Übungsaufgabe ist drück ich da mal ein Auge zu, aber ansonsten würde ich dir raten
    alles neu auszuarbeiten um vorallem mal globale Variablen und Funktionszeiger rauszubringen.



  • möpäl schrieb:

    1. Wie lauten die Fehlermeldungen des Compilers?
    2. Was ist 'FM[0]'? Das wurde nirgends deklariert.
    3. (unwichtiger) Hast du wohl vorher bereits länger C programmiert? ^^

    Du müsstest wohl ein globales Array FM vom Typ deiner Struktur anlegen, dann dürfte es funktionieren wie gewünscht.
    Weil das anscheinend nur eine Übungsaufgabe ist drück ich da mal ein Auge zu, aber ansonsten würde ich dir raten
    alles neu auszuarbeiten um vorallem mal globale Variablen und Funktionszeiger rauszubringen.

    1: verschiedene, je nachdem was ich probiert habe.......daraus ja frage 2:
    ->2: und genau das weiß ich nicht, wo sollte ich das machen? Wie sollte ich das richtig machen?
    3: wieso? eigentlich gar nicht!!



  • oder noch besser, eine Funktion, wo das Array erzeigt wird...und initialisiert!
    Oder ganz anders?

    Wäre für hilfe dankbar!



  • weis keiner was? 😕



  • ->2: und genau das weiß ich nicht, wo sollte ich das machen? Wie sollte ich das richtig machen?

    Hab ich doch bereits gesagt, leg ein globales Array vom Typ deiner Struktur an. Zum Beispiel so:

    // FM.h
    #ifndef FMH
    #define FMH
    
    struct sF
    {
     char* c_string;
     void (*funktion)();
    };
    
    extern sF FM[10];
    
    void InitManager();
    void test();
    
    //---------------------------------------------------------------------------
    #endif
    
    // FM.cpp
    // irgendwo in dieser Datei:
    sF FM[10];
    

    Btw. was soll FM heißen? FunktionsManager? Dann schreib das auch so hin. Bei solchen Abkürzungen
    beginnt ein blindes drauflos raten (was sF heißen soll, weiß ich noch immer nicht).

    Nach wie vor rate ich dir aber von dem Code ab, da es wesentlich scöner lösbar ist.



  • [quote="möpalNach wie vor rate ich dir aber von dem Code ab, da es wesentlich scöner lösbar ist.[/quote]

    ok, und wie??



  • und zu dem problem, ist jetzt noch ein anderes hinzugekommen!

    Ich habe public eine int in einer header (habe alle probiert) erstellt!

    Nun kann ich im hauptprogramm (Unit1) diese verändern (variable in Unit2.h), aber eine Funktion aus Unit2.cpp kann sie nicht verändern....!

    Wieso?


Anmelden zum Antworten