Problem mit der Gültigkeit von Klassen



  • Hallo zusammen.

    Vorab als Warnung: ich bin noch sehr unbedarft was das programmieren angeht, also bitte ich um etwas Nachsicht bei offensichtlichen Patzern.

    Ich versuche erstmal den Aufbau des Programms zu schildern. Es existiert eine normale .cpp und eine .h Headerdatei. in der .cpp befindet sich das Hauptprogramm welches eine Funktion aufruft (void Erstelle_Klassse), die eine Klasse initialisiert (Name: Keil). Die Definition der Klasse befindet sich in der Header-Datei. Es sollte noch erwähnt werden, das die Klasse als Zeiger definiert wird, um sie im Heap zu erstellen. Ausschnitt aus Headerdatei:

    struct Schnittkoordinaten
    {
    double Eigenschaft;
    double x;
    double y;
    };
    Schnittkoordinaten *Keil;
    void Erstelle_Klassse ()

    Was ich eigentlich nur hinkriegen möchte ist, dass ich eine Klasse erstellen möchte, deren Größe und Elemente erst in der Funktion zugeteilt werden, diese jedoch nach dem Funktionsaufruf in dem gesamten Hauptprogramm (aber auch nicht darüber hinaus, da ich die main-Funktion später noch als Funktion eines größeren Programmes einbinden möchte) verfügbar ist und auf sie zugegriffen werden kann.
    Vielen Dank im Voraus.



  • Neepomuk schrieb:

    Was ich eigentlich nur hinkriegen möchte ist, dass ich eine Klasse erstellen möchte, deren Größe und Elemente erst in der Funktion zugeteilt werden, diese jedoch nach dem Funktionsaufruf in dem gesamten Hauptprogramm (aber auch nicht darüber hinaus, da ich die main-Funktion später noch als Funktion eines größeren Programmes einbinden möchte) verfügbar ist und auf sie zugegriffen werden kann.

    😕

    Kannst du das vielleicht ein bischen genauer erklären?



  • Sorry, weiß nicht so genau wie ich das Problem am besten schildern soll.

    Also, ich möchte eine dynamisch Klasse, die nur innerhalb einer bestimmten Funktion benötigt wird. Diese Funktion ruft aber ebenso andere Funktionen auf, in denen auf diese Klasse natürlich ebenso zugegriffen werden können soll. Versuch den Aufbau mal so darzustellen:

    Hauptprogramm(-funktion)
    -> Funktion 1
    -> Funktion 2 -> Funktion 2.1 -> Funktion 2.2
    -> Funktion 3

    Dabei soll die Klasse in der gesamten Fkt. 2 gültig und benutzbar sein, ebenso wie in den Unterfkt. 2.1, 2.2. Außerhalb dieser Funktion(en) soll der Speicherplatz für andere Anwendungen verfügbar sein.
    Klingt irgendwie einfach aber es will nicht klappen. Hab schon allesmögliche ausprobiert...



  • Ich kann mir zumindest nicht vorstellen was du mit

    Neepomuk schrieb:

    Dabei soll die Klasse in der gesamten Fkt. 2 gültig und benutzbar sein. Außerhalb dieser Funktion(en) soll der Speicherplatz für andere Anwendungen verfügbar sein.

    meinst



  • Erstelle das Objekt in main auf dem Stack und übergib eine Referenz an alle Funktionen.



  • @ EEK

    Soll heißen, dass ich die Klasse nicht global deklarieren möchte. Sie soll halt nur in der Funktion 2 (mit allen Funktionen darin befindlich) verfügbar und existent sein. Vielleicht klappt das ja auch einfach nicht so mit dynamischen Variablen, aber dafür hab ich leider zu wenig Ahnung...
    Mal anders, wenn man die Klasse mit ihren Eigenschaften global deklariert, sie aber erst in einer bestimmten Funktion (im Laufe des Programms) definiert und sie mit Werten versieht, wird auch dann erst der Speicher belegt oder schon zuvor?

    Beispiel wie folgt:

    struct Schnittkoordinaten
    {
    double Eigenschaft;
    double *x;
    double *y;
    };
    Schnittkoordinaten *Keil;

    Wenn Deklaration wie oben in der Header-Datei für die globalen Variablen steht, der Aufruf, wie z.B.:

    Keil = new Schnittkoordinate [irgendeineGroesse];

    for (i=0 ; i<= irgendeineGroesse; i++)
    {
    Keil[i].x = new double [irgendeineAndereGroesse];
    Keil[i].y = new double [irgendeineAndereGroesse];
    }

    dann irgendwann im Laufe des Programmes. Ab wann wird der Speicher belegt oder reserviert?

    @ LordJaxom

    Könntest du mr genauer erklären was du damit meinst? Wie schon erwähnt ist das alles noch recht Neuland für mich...



  • Es gibt in C(++) keine lokalen Funktionen, also kann die Funktion2 auch keine anderen Funktionen enthalten 😉 Und einzelne Objekte kannst du per Parameter durchreichen:

    void fun2_1(CTest& obj)
    {
      //arbeite mit obj
    }
    
    void fun2()
    {
      CTest obj;
      fun2_1(obj);
      ...
    }
    

    Ab wann wird der Speicher belegt oder reserviert?

    Der Speicher wird in dem Moment belegt, wo du new aufrufst (und bleibt belegt, bis das zugehörige delete kommt).


Anmelden zum Antworten