Wo muss ich Funktionen definieren damit ich diese von fremden Form ansprechen kann ?



  • hi,

    ich hab z.b. in unit1 eine funktion

    void ausgabe(AnsiString msg)
    { 
      ShowMessage(msg);
    }
    

    Wie muss ich es denn jetzt anstellen damit ich diese Funktion z.b. von Unit2 aus aufrufen kann ?

    muss ich es dann in

    public:		// Anwender-Deklarationen
            __fastcall TForm1(TComponent* Owner);
            void ausgabe(AnsiString msg);
    

    reinschreiben oder wie ??????



  • Ja.



  • stimmt es auch von der deklaration usw. wie ich es gemacht habe ?



  • Naja eigentlich schon wuerde ich sagen...



  • ok, dann bin ich ja froh.

    danke für deine hilfe!



  • geht aber nicht richtig:

    [Linker Fehler] Unresolved external 'TForm1::ausgabe(System::AnsiString)' referenced from E:\CPP3\FUNKTIONEN NUTZEN\UNIT1.OBJ

    Form1:

    // Übergabe von Ansistring als Referenz
    void ausgabe(AnsiString msg)
    {
       ShowMessage(msg);
    }
    
    public:		// Anwender-Deklarationen
            __fastcall TForm1(TComponent* Owner);
            void ausgabe(AnsiString msg);
    };
    

    Form2:

    [cpp]
    void __fastcall TForm2::Button1Click(TObject *Sender)
    {
    AnsiString msg = "test";
    Form1->ausgabe(msg);
    }



  • void TForm1::ausgabe(AnsiString msg) 
    { 
       ShowMessage(msg); 
    }
    

    wäre besser



  • ok, danke bei meinem formular funktioniert das ganze jetzt auch aber wie als ich das bei meinem Datenmodul versucht habe kam folgender Fehler:

    [C++ Fehler] Datenmodul.h(24): E2090 Qualifizierer 'frmDB' ist kein Name einer Klasse oder einer Struktur
      Vollständiger Parser-Kontext
        Anmeldung.cpp(15): #include E:\Cpp3\____RP 04\Datenmodul.h
        Datenmodul.h(13): class TfrmDB
    

    Gibt es da auch eine Möglichkeit ?



  • wenn du dein in den datenmudul direkt die cpp datei includierst müsstest du die funktion einfach ansprechen können !
    aber das ist keine gute methode, da dann dein programm sehr unübersichtlich wird ! es wäre besser, wenn du eine klase dafür machst die diese funktion, und ähnliche enthält und zusammanfasst !
    wenn es eine funktionssamlung ist, kannst du auch eine DLL programmieren, so bleibt dein code übersichtlicher. wenn du eine funktion in eine klasse aufnimmst musst du sie immer bei der inplementierung mit dem klassenname gefolgt von zwei doppelpunkten schreiben. sonst ist sie kein element der klasse !
    bsp:

    //header datei
    class ausgabeprozeduren
    {
    public:
       void ausgabegruen();   //semikolon nicht vergessen
       void ausgaberot();
    }
    
    //cpp datei:
    #include "header-datei.h"
    
    void ausgabeprozeduren::ausgabegruen()
    {
       ShowMessage("grün");
    }
    
    void ausgabeprozeduren::ausgaberot()
    {
       ShowMessage("rot");
    }
    

    noch ein tipp: du kannst auch die ausgabeprozeduren von der Datenklasse ableiten ! oder eine friend funktion hinzufügen oder in protected reinschreiben!

    ich hoffe ich konnte dir helfen !
    MFG CDK



  • doch, dein tipp ist sehr hilfreich aber kannst du mir mal folgenden satzt erklären:

    noch ein tipp: du kannst auch die ausgabeprozeduren von der Datenklasse ableiten !

    wie muss ich das denn jetzt anhand des beispielens vorstellen und machen ???

    danke



  • hier die aktuelle fehlermeldung:

    [Linker Fehler] Unresolved external 'TfrmDB::aSQL(System::AnsiString)' referenced from E:\CPP3\____RP 04\ANMELDUNG.OBJ
    

Log in to reply