Dynamisches Array und Zufallszahl



  • Hallo,
    Ich habe folgende funktion, die 4 zufällige zahlen erzeugt und diese anschließend zu einer einzigen vierstelligen Zahl verbindet:

    void MastermindDigits::makeDigitsToGuess()
    {
    	time_t t;
    	time(&t);
    	srand((unsigned int)t);
    	unsigned int digit1, digit2, digit3, digit4;
    	digit1 = (rand() % 6) + 1;
    	digit2 = (rand() % 6) + 1;
    	digit3 = (rand() % 6) + 1;
    	digit4 = (rand() % 6) + 1;
    
    	unsigned int number = digit1 * 1000 + digit2 * 100 + digit3 * 10 + digit4;
    	MastermindDigits(number);
    }
    

    Siehe die letzte Zeile:

    MastermindDigits(number);
    

    Diese number will ich dann also meinem kontruktor geben.

    Kontruktor:

    MastermindDigits::MastermindDigits(unsigned int number)
    {
    	digits = new unsigned int[4];
    	for (int i = 3; i >= 0; i--)
    	{
    		digits[i] = number % 10;
    		number /= 10;
    	}
    
    	locationRight = 0;
    	locationWrong = 0;
    	size = 4;
    }
    

    Nun bekomm ich allerdings die fehlermeldung:

    error C2371: 'number': Neudefinition; unterschiedliche Basistypen
    

    Weiß wer was da falsch ist? Hört sich so an als ob mein "number" kein unsigned int ist was der kontruktor ja als argument verlangt.



  • Suche die vollständige Meldung. Da steht sicher mehr, insbesondere eine Zeilennummer.



  • Also die meldung

    error C2371: 'number': Neudefinition; unterschiedliche Basistypen
    

    bezieht sich auf die Zeile

    MastermindDigits(number);
    

    Und dann gibt es noch die Meldung

    Siehe Deklaration von 'number'
    

    die sich auf die Zeile

    unsigned int number = digit1 * 1000 + digit2 * 100 + digit3 * 10 + digit4;
    

    bezieht.

    Aber mehr steht da nicht (Visual Studio 2013).



  • Es scheint ja unheimlich kompliziert zu sein, hier eine komplette Fehlemeldung zu zeigen.

    MastermindDigits(number);
    

    Was glaubst du, was das macht?



  • Den Konstruktor aufrufen und in dem dynamischen array die einzelnen ziffern der zufällig erstellten zahl reinschreiben? Zumindest will ich das er das macht.

    Und die ganz vollständige fehlermeldung wäre so:

    1>c:\users\abc\documents\visual studio 2013\projects\praktikum1aufgabe1v2\praktikum1aufgabe1v2\masterminddigits.cpp(70): error C2371: 'number': Neudefinition; unterschiedliche Basistypen
    1>          c:\users\abc\documents\visual studio 2013\projects\praktikum1aufgabe1v2\praktikum1aufgabe1v2\masterminddigits.cpp(69): Siehe Deklaration von 'number'
    

    Aber so wirds ja nur unübersichtlicher und die zeilennummern stimmen ja ohnehin nicht überein.



  • Und Konstruktoren kann man einfach so aufrufen wie normale Funktionen?



  • Hmm anscheinend nicht. Wieso geht das nicht?

    Alternativ kann ich auch innerhalb der "makeDigitsToGuess" funktion die einzelnen zufällig erstellten zahlen in das dynamische array "digits" reinschreiben. Also dann so:

    *(digit) = digit1;
    *(digit+1) = digit2;
    ...
    


  • Falls makeDigitsToGuess keine static Funktion ist und der Konstruktor vorher alles richtig initialisiert hat und man die Initialisierung des RNG korrekterweise nur einmal in main macht, bleibt nichts weiter als

    void MastermindDigits::makeDigitsToGuess() 
    { 
        digit[1] = (rand() % 6) + 1; 
        digit[2] = (rund() % 6) + 1; 
        digit[3] = (rand() % 6) + 1; 
        digit[0] = (rand() % 6) + 1; 
    }
    


  • Ok thx, so habs ich nun auch gemacht. Funktioniert auch soweit.


  • Mod

    vivess schrieb:

    die zeilennummern stimmen ja ohnehin nicht überein.

    Es ist logischerweise deine Aufgabe, die Zeilennummern den entsprechenden Zeilen in den gezeigten Codeschnipseln zuzuorden (z.B. durch Kommentar am Ende der entsprechenden Zeile). Andernfalls sagst du nur, das irgendwo ein Fehler auftritt, obwohl du die Stelle genau kennst. Was für den Rest von uns unnötigen Aufwand zur Folge hat - und häufig (bei mir: so gut wie immer) dazu führt, dass dein Beitrag schlicht ignoriert wird.


Log in to reply