Objekte in weiterer Unit referenzieren



  • Oh man, ich kann garnicht glauben, wieviel C++ ich nach 2? Jahren Abstinenz vergessen habe... ich komme mir fast schon verkrüppelt vor. Nun denn, momentan versuche ich, auf ein Objekt (TScrollBox) meines Programmes in einer weiteren Unit zuzugreifen.

    Zur Veranschaulichung:

    Unit1.cpp

    #include "Unit2.cpp"
    

    Unit2.cpp

    extern TScrollBox *ScrollBox1;
    
    ...
    
    ScrollBox1->Width = 100; // Beispiel
    

    Soweit, so gut. Ich kann, wenn ich "ScrollBox1->" schreibe, bereits auf die Codehilfe (dieses aufklappende Menü) zurückgreifen, die ScrollBox ist also eigentlich registriert. Wenn ich das Programm allerdings kompiliere, kommt die Fehlermeldung "Unresolved external '_ScrollBox1' referenced from UNIT1.OBJ".

    Wie kann ich dieses Problem lösen?

    Danke.



  • wenn du die andere Unit includiert hast in der Form brauchst du kein

    extern TScrollBox *ScrollBox1;
    

    sonder greifst einfach über die Form auf das Objekt zu.

    Form2->ScrollBox1->Width = 100;
    


  • Der Weg funktioniert nicht..

    Ich habe nur eine Form: Form1. Dazugehörig Unit1.cpp, in welcher ich Unit2.cpp (ohne Form, ist lediglich diese Datei) inkludiere. Von dort aus möchte ich dann auf Objekte von Form1 zugreifen können. Jetzt vielleicht klarer, was ich bezwecke? Oder habe ich Dich nur falsch verstanden?



  • OK dachte bei der Unit2.cpp handelt es sich auch um eine Form sorry.

    Die Funktionen die in der Unit2.cpp stecken werden sicher von der Form1 aus aufgerufen? wenn ja kannst du ja deiner Funktion einen Zeiger auf die Form übergeben und auf den Objekte zugreifen

    ala

    void MyFunction(TForm *MyForm) {
      MyForm->ScrollBox1->Width = 100;
    }
    

    oder nur einen Zeiger auf die ScrollBox übergeben

    void MyFunction(TScrollBox *MyScrollBox) {
      MyScrollBox->Width = 100;
    }
    


  • Ah klar, danke. So eingerostet bin ich 🙄

    Gibt's sonst noch eine Möglichkeit, Objekte allgemein zu referenzieren? So in etwa, wie ich es im ersten Post versucht habe?


Anmelden zum Antworten