Zahlen per zufall abarbeiten


  • Mod

    evil-peter schrieb:

    void CRandom_TestDlg::OnBnClickedButton1()
    { 
    
        Random test;
        CString in; 
            in.Format(_T("%d"),*test.it); 
            m_strAusgabe = in; 
            UpdateData (FALSE); 
    }
    

    Und da passiert halt das, daß der Vector beim Buttonklick keine werte mehr hat. Da kommt dann aucch ein Absturtz.
    Mehr kann ich da jetzt auch nicht zu sagen

    hier wird zufall gar nicht aufgerufen, und it nicht initialisiert. so kann es nat. nicht gehen.

    evil-peter schrieb:

    Das habe ich noch vergessen:

    Random test;
        int Count = 10;
        test.zufall(Count);
    

    Bei Programmstart aufgerufe

    uninteressant. schließlich hat CRandom_TestDlg::OnBnClickedButton1 ja sein eigenes lokales Random objekt.



  • #include <vector> 
    
    class Random 
    { 
    public: 
    
      void zufall(int count); 
    
      typedef vector <int> IntVector; 
    
      IntVector Numbers; 
    
    };
    
    void Random::zufall(int count)
    {
       Numbers.clear();
       for(int k=0; k<count;k++)
       {
          Numbers.push_back(k);
       }
       random_shuffle(Numbers.begin(), Numbers.end()) ;
    }
    
    int main(int argc, char* argv[])
    {
       srand(time(NULL));
       Random test;
       int Count = 10;
       test.zufall(Count);
       for (int i=0;i<test.Numbers.size();i++) cout << test.Numbers[i] << " ";
       return 0;
    }
    


  • Ich glaube ihr versteht mich nicht ganz. Im Prizip funktioniert das ja alles. Aber eben nur lokal, d.h. daß der Vektor sobald ich etwas anderes mache wieder leer ist und das will ich halt verhindern!!

    Edit:
    Die Funktion soll mir den Vektor zurückgeben damit ich in meinem Hauptprogramm damit machen kann, was ich will. Also ich brauche die Zahlenfolge einfach immer wieder.

    ungefähr so:
    Funktion in der Klasse erstellt mir den Vektor mit einer Zahlenfolge von 0 bis n zufällig angeordnet.
    Und dann kann ich den vektor in anderen Funktionen weiter verwenden.

    Und das geht halt noch nicht! Zur Zeit geht es bei mir nur so, daß ich den Aufruf der Randomfunktion und den Vektor dazu nur in dem selben Hauptdialog verwenden kann.



  • Hallo ?

    In deiner Instanz "CRandom_TestDlg":

    Random test;
    


  • Es soll ungefähr so funktionieren:

    void CRandom_TestDlg::OnBnClickedButton1()
    { 
    	Random test;
    	CString in;
    
    	if(i==0)
    	{
        int Count = 10;
        test.zufall(Count);
         meins = test.it; //meins ist hier ein deklarierter Vektor im Hauptprogramm
    
            in.Format(_T("%d"),test.it[i]);
    
            m_strAusgabe = in; 
            UpdateData (FALSE); 
    		i++;
    	}
    	else
    	{
    
            in.Format(_T("%d"),meins[i]);
            m_strAusgabe = in; 
            UpdateData (FALSE);
    		i++;
    	}
    }
    

    Also nach jedem Buttonklick soll die nächste Zahl gezeigt werden



  • Nach deinem Ereignis: OnBnClickedButton1() existiert dein Objekt test nicht mehr, und damit auch nicht dein vector.

    Wenn du nun dein

    Random test;
    

    als Member von CRandom_TestDlg nimmst, lebt dein vector auch solange wie dein CRandom_TestDlg.



  • borst schrieb:

    Nach deinem Ereignis: OnBnClickedButton1() existiert dein Objekt test nicht mehr, und damit auch nicht dein vector.

    Wenn du nun dein

    Random test;
    

    als Member von CRandom_TestDlg nimmst, lebt dein vector auch solange wie dein CRandom_TestDlg.

    Wie soll ich das denn machen?

    Habe das jetzt hinbekommen, also einfach die Random test; in die Klassendeklaration von meinen CRandom_TestDlg. Wunderbar, das war es eigentlich nur, was ich brauchte. Vielen Dank dafür.

    Schade nur, daß ich dafür so lange Zeit vergeuden mußte 😞



  • Random test;
    

    in den private Bereich von CRandom_TestDlg schreiben.


  • Mod

    evil-peter schrieb:

    Schade nur, daß ich dafür so lange Zeit vergeuden mußte 😞

    das vermeidest du, indem du präzisere fragen stellst.



  • camper schrieb:

    evil-peter schrieb:

    Schade nur, daß ich dafür so lange Zeit vergeuden mußte 😞

    das vermeidest du, indem du präzisere fragen stellst.

    Ja ist schon klar. Ich bin aber noch am Lernen und da weiß man auch manchmal nicht so richtig, wie man sich ausdrücken muß. Und wenn man dann so ein Problem hat, sieht man sowieso am Ende irgendwann nicht mehr durch. Hätte ich das komplette Programm hier beschrieben, dann hätte wahrscheinlich niemand so recht gewußt, was ich meine und deshalb war es halt nur ein kleines Testprogramm.

    Trotzdem noch mal Danke an Alle!!!!!!!!!!!!!!!!!!


Anmelden zum Antworten