Array von Enums mit Standardwert füllen



  • Hallo ich habe eine Array von Enums

    ETEST eArray[5];
    

    Und würde dies nun gerne mit dem Enumwert EVAL1 befüllen. Ich hab es mit der memset Funktion versucht, aber es geht nicht.

    memset(eArray, ETEST::EVAL1 , 5 * sizeof(int));
    

    Wie bekomm ich das hin? Danke für Hilfe!



  • Als Ersatz für memset gibt es in C++ die Algorithmen fill und fill_n, zu finden in <algorithm>

    std::fill_n(eArray, 5, ETEST::EVal1); // oder, dynamischer:
    std::fill_n(eArray, sizeof(eArray)/sizeof(eArray[0]), ETEST::EVal1);
    

    BTW:
    Das "geht" mit memset sehr wohl, es kommt nur nicht das erwartete Ergebnis raus.
    (EDIT: Dies ist ein dezenter Hinweis darauf, dass Du, wohl aufgrund eines bedauerlichen Irrtums, vergessen hast zu beschreiben wie "geht nicht" sich denn äußert).



  • memset arbeitet byteweise - bei größeren Objekten funktioniert das bestenfalls mit 0-Werten (oder wenn das Bitmuster periodisch ist). Aber versuch' mal std::fill() bzw. std::fill_n() (oder befüll das Array direkt über die Initialisierungsliste).



  • was spricht gegen:

    ETEST eArray[5] = {ETEST::EVAL1};
    

    ?



  • ETEST eArray[5] = {ETEST::EVAL1};
    

    Ist es nicht so, dass dabei, dass erste Element auf ETEST::EVAL1 gesetzt wird und die anderen auf 0?
    Solange EVAL1 == 0 ist geht das, aber hierbei müsste das Probleme geben:

    enum ETEST
    {
        EVAL1 = 4
    };
    

    Oder irre ich mich?

    Gruß
    Don06



  • Don06 schrieb:

    ETEST eArray[5] = {ETEST::EVAL1};
    

    Ist es nicht so, dass dabei, dass erste Element auf ETEST::EVAL1 gesetzt wird und die anderen auf 0?
    Solange EVAL1 == 0 ist geht das, aber hierbei müsste das Probleme geben:

    enum ETEST
    {
        EVAL1 = 4
    };
    

    Oder irre ich mich?

    ne, hast scho recht, hab das garnicht bedacht da ich sonst immer den default value auf 0 mappe.


Anmelden zum Antworten