nooby-problem...



  • hi, also ich habe da nen freund, der hat nen problem..

    .. ne quatsch ich habe es ^^

    also:

    class CGame
    {
        private:
            string sObenKarte;
    
        public:
            CGame(){sObenKarte="A2";}
    
            void LegeObenKarte(string sEingabeUserU)
            {
                sObenKarte[0]=sEingabeUserU[0];
                sObenKarte[1]=sEingabeUserU[1];
            } 
    
            string LeseObenKarte()
            {
                return sObenKarte;
            }
    };    
    
    class CSpieler
    {
        private:
            string sArr1[5][2]; 
            int iRichtigePosImArr;
        public:
    
    (...)  
    
            bool ZugRichtig(string sEingabeUserU)
            {
                if(sEingabeUserU[0]==spiel.LeseObenKarte()[0] || sEingabeUserU[1]==spiel.LeseObenKarte()[1])
                {   
                    for (int i=0; i<5; i++)
                    {
                        if(sEingabeUserU[0]==sArr1[i][0][0] && sEingabeUserU[1]==sArr1[i][1][0])
                        {
                            iRichtigePosImArr=i;
                            return true;
                        }   
                    }    
                }
                return false;  
            }       
    
    };
    
    int main()
    {
    (...)
    CSpieler spieler1, spieler2;
    CGame spiel;
    (...)
    }
    

    nun, in der Klasse CSpieler() versuche in der Funktion ZugRichtig() auf eine Funktion in der anderen Klasse, CGame zuzugreifen.

    spiel.LeseObenKarte()[0]
    

    klappt natürlich nicht, weil spiel noch nicht gesetzt wurde.

    Question: 😕 wie kann ich auf funktionen in anderen Klassen zugreifen? 😕

    ➡ wie gesagt, noobiefrage, aber wer nciht fragt bleibt dumm 🙂

    danke schonmal im voraus,
    lg, Micha



  • 1. Du könntest (was irgendwie nicht passt) spiel als Membervariable von Spieler machen.

    2. Oder du könntest ne globale Variable anlegen.



  • Glamdrink schrieb:

    1. Du könntest (was irgendwie nicht passt) spiel als Membervariable von Spieler machen.

    So unpassend find ich das gar nicht, du musst dann nur sicherstellen, dass, wenn das Spiel gestorben ist, kein Spieler versucht weiterzuspielen.
    Die Lösung mit der globalen Variable ist dagegen schon eher unschön.

    @jaykay
    Man könnte zB ZugRichtig einen Parameter mitgeben, der das aktuelle Spiel angibt:

    bool ZugRichtig(string sEingabeUserU, CGame& spiel)
    

    Ist zwar relativ einfach, spiegelt aber letztendlich die Realität nicht wirklich wieder. Vielleicht fällt dir ja vom Design her noch was besseres ein, schliesslich gehören die Spieler zu einem Spiel und nicht umgekehrt.

    noch ein paar Tipps:
    - achte auf const correctness (dh wenn keine Member verändert werden, mach die Funtion const)
    - übergib string by reference nicht by value

    void LegeObenKarte(string sEingabeUserU)
    

    Hier wird jedes mal eine Kopie erstellt, dh Speicher reservieren, kopieren, am Ende wieder freigeben. Nicht schön. Besser so:

    void LegeObenKarte(const string& EingabeUserU)
    


  • hey groovemaster und drink, danke für eure ideeen 🙂

    nun klappt alles...
    ...mein erstes c++ programm 😉 hach...
    werde es noch ver"bessern" und euch dann den downloadlink geben, *rofl*

    :p

    schönen abend noch,

    lg, Micha


Anmelden zum Antworten