Variable von Funktion einer Klasse definieren



  • Hallo,
    ich will von einer Funktion, einer Klasse, eine Variabele in der Klasse Definieren, wie muss ich das machen

    /* in der Header */
    class TGame
    {
     public:
     void VraiabeleGenerieren (void);
     void VariabeleAbrufen (void);
    };
    
    /* in der cpp */
    void TGame::VraiabeleGenerieren (void)
    {
     int Bilder[3] = {1, 2, 3};
    }
    void TGame::VariabeleAbrufen (void)
    {
     printf("%d", Bilder[1]);
    }
    

    Leider gibt es einen Error. Was muss ich noch tun, damit Bilder in die Klasse als Variabele geschrieben wird?

    Stratege993



  • class TGame
    {
    private:
      int Bilder[3];
     public:
     void VraiabeleGenerieren (void);
     void VariabeleAbrufen (void);
    };
    
    /* in der cpp */
    void TGame::VraiabeleGenerieren (void)
    {
     this.Bilder[0] = 1;
     this.Bilder[1] = 2;
     this.Bilder[2] = 2;
    
    }
    void TGame::VariabeleAbrufen (void)
    {
     //wir sind hier in C++ also bitte std::cout
     std::cout<<Bilder[0]<<Bilder[1]<<Bilder[2]<<std::endl;
    
    }
    

    Um Member zu füllen wie in deiner Generieren Methode, gibt es aber den Konstruktor, informier dich mal.



  • Die einzige Antwort die man hier geben kann ist wohl: lern programmieren. In jedem Buch zum Thema C++ werden Klassen abgehandelt.
    Achja super Fehlerbeschreibung: "Leider gibt es ein Error". Mal von den Rechtsschreibfehlern in deinem Posting und Code abgesehen.



  • Das 2. Problem ist aber, das ich erst in der Funktion VraiabeleGenerieren (jetzt im konstruktor) mitbekomme wie groß das array ist.
    Und danke für das Stichwort, hilft mir sehr.

    Stratege993



  • ist doch scheiß egal dann machs halt so

    class TGame
    {
    private:
      int *Bilder;
      int size;
     public:
     Tgame(int s)
     {
        size = s;
        Bilder = new int[size];
     }
     void VariabeleAbrufen (void);
    };
    
    /* in der cpp */
    
    void TGame::VariabeleAbrufen (void)
    {
     //wir sind hier in C++ also bitte std::cout
     std::cout<<Bilder[0]<<Bilder[1]<<Bilder[2]<<std::endl;
    
    }
    

    somit kannst du die größe dynamisch beim erstellen, festlegen 😉



  • Und nicht vergessen, einen Destructor anzulegen, in dem "Bilder" wieder zerstört wird.



  • Oder gleich STL-Container benutzen.

    P.S.:

    Stratege993 schrieb:

    Vraiabele

    Das ist schon fast so gut wie die "quadratuaheln" 😃



  • Das mit dem Vraiabele war ein Buchstabendreher.
    Das mit "Bilder = new int[size];" geht aber leder nur bei 1 Dimensionalen Arrays, wie sieht es mit 2 Dimensionalen Arrays aus?


  • Administrator

    Stratege993 schrieb:

    Das mit "Bilder = new int[size];" geht aber leder nur bei 1 Dimensionalen Arrays, wie sieht es mit 2 Dimensionalen Arrays aus?

    Man kann es mit zwei Versionen machen:

    1. int* array = new int[sizeX * sizeY];
      Dies erspart einem das mühsame Arbeiten mit 2 dimensonalen Arrays, ist allerdings etwas weniger flexibel.
    int** array = new int*[sizeY];
    // Wir erstellen ein Array, welches Zeiger beinhaltet.
    // Man könnte diese Zeiger als die Zeiger auf die Zeilen betrachten.
    
    // Nun erstellen wir die Zeilen.
    for(int i = 0; i < sizeY; ++i)
    { array[i] = new int[sizeX]; }
    

    Vergiss aber die entsprechenden delete[] s nicht!

    Wurde im übrigen schon den in der Standardbibliothek enthaltenen std::vector erwähnt?
    http://www.cplusplus.com/reference/stl/vector/

    Grüssli


Anmelden zum Antworten