Skocz do zawartości

Ograniczenie widoczności typu wyliczeniowego


Pomocna odpowiedź

Napisano

Czy jest możliwość tak obudować typ wyliczeniowy aby był widoczny tylko w zakresie struktury, lub nowego powołanego typu danych? Np:

#include<stdio.h>

typedef struct { enum {aa,ii,dd}cci ;}cc_t;

int main() {
    printf("enum = %i", ii);
}

Chciałbym aby wartość "ii"(w ogóle to co znajduje się w enum) była widoczna tylko w zakresie typu cc_t, tymczasem program potrafi "printować wartość ii 

Co znaczy "w zakresie typu" bo to jakiś bełkot...

Jak sobie wyobrażasz coś takiego:

cc_t item = {?};

Co będzie zamiast znaku zapytania?

Powiedz co chcesz osiągnąć.

7 minut temu, ethanak napisał:

Powiedz co chcesz osiągnąć

To że dostęp do enum miałby być tylko w momencie kiedy powołam nową zmienna typu cc_t, tak jak to jest ze zmiennymi kiedy są one umieszczane w strukturze czyli

#include<stdio.h>


typedef struct {
    
    char a;
    int b;
    enum {aa,ii,jj}ej;
    
}ax_t; // nowy typ

ax_t ax; // zmienna 

int main() {
ax.a = 'k'; // przypisanie
    printf("k = %i", ax.a); // 'a' jest widoczne tylko tylko przez odniesienie do ax
    printf("k = %i", ii);   // ii jest widoczne cały czas
}

a chcę to zrobić temu aby kiedy wybieram jakąś wartość z enuma była ona ściśle powiązana ze strukturą z której pochodzi. nie wiem jak to inaczej opisać

(edytowany)

C++ i enum w klasie (konkretniej klasa zamiast struktury i typedefa).

#include <stdio.h>

class cc_t {
    public:
    enum xx {
        aa,
        bb,
        cc};
    enum xx field;
};

cc_t element = {cc_t::bb};

int main(int argc, char *argv[])
{
    printf("%d\n",element.field);
}

 

Edytowano przez ethanak

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...