Hledáme nového kolegu do redakce - 100% home office, 100% flexibilní pracovní doba. Více informací.
Využij akce až 80 % zdarma při nákupu e-learningu - více informací. Zároveň pouze tento týden sleva až 80 % na e-learning týkající se Swift
discount week 80
Avatar
AdamDev
Člen
Avatar
AdamDev:14.10.2020 20:31

Dobrý den,
nevím co je nutné opravit, popřípadě připsat, aby nebyl warning. Nachází se na řádku "p_osoba->Pohlavi = pMuz"
"C26812: Typ výčtu (enum) ePohlavi není vymezený. Místo enum upřednostňujte enum class (Enum.3)"

#include <iostream>
#include <string.h>

typedef enum {
    pZena, pMuz
}ePohlavi;

typedef struct {
    char Jmeno[20];
    char Prijmeni[20];
    unsigned char Vek;
    ePohlavi Pohlavi;
}Osoba;

void Vypis(const Osoba& osoba) {
    std::cout << "Jmeno: " << osoba.Jmeno << " Prijmeni: " << osoba.Prijmeni << " Vek: " << (int)osoba.Vek << " Pohlavi: ";
    switch (osoba.Pohlavi) {
        case pMuz: std::cout << " muz" << std::endl;
            break;
        case pZena: std::cout << " zena" << std::endl;
           break;
    }
}

int main()
{
    Osoba osoba = { "Lukas", "Novak", 35, pMuz };
    Osoba* p_osoba = new Osoba;

    strcpy_s(p_osoba->Jmeno, 20 ,"Adam");
    strcpy_s(p_osoba->Prijmeni, 20,  "Novak");
    p_osoba->Vek = 26;
    p_osoba->Pohlavi = pMuz;

    Vypis(osoba);
    Vypis(*p_osoba);

    delete p_osoba;
    p_osoba = NULL;
    return 0;

Předem díky za každou radu.

Editováno 14.10.2020 20:33
 
Odpovědět
14.10.2020 20:31
Avatar
Patrik Valkovič
Člen IT Redactor Gang
Avatar
Odpovídá na AdamDev
Patrik Valkovič:14.10.2020 22:50

Ahoj. Od standardu C++11 je v C++ upřednostňován tzv. scoped enum. Ten se zapisuje takhle:

enum class ePohlavi {
    pZena, pMuz
};

Osoba osoba = { "Lukas", "Novak", 35, ePohlavi::pMuz };

Jde o to, že bez toho klíčového slova class můžeš kdekoliv programu použít právě pMuz a pZena (tj. unscoped enum). V případě scoped enum je součástí jména právě i název enumu, tedy ePohlavi::pMuz a tak není "globální" prostor jmen tak zanesen.

V C++ se také již nepíše typedef, ale struct Nazev popř. enum Nazev. Verze s typedef je spíše pro čisté C. Pokud chápu kontext, tak kompiluješ ve Visual Studiu, který vše kompiluje právě pod C++.

V každém případě se jedná pouze o Warning a ne o chybu, program bude fungovat a ten warning je spíše takové upozornění od novějších standardů C++. Pokud se učíš C, můžeš s tím pokračovat. Pokud C++, je lepší to opravit a také opravit typedef.

Nahoru Odpovědět
14.10.2020 22:50
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
AdamDev
Člen
Avatar
Odpovídá na Patrik Valkovič
AdamDev:15.10.2020 8:01

Díky moc, zas jsem se dozvěděl něco nového.

 
Nahoru Odpovědět
15.10.2020 8:01
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.