Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Qt enum in struttura
Forum - C/C++ - Qt enum in struttura - Pagina 2

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
Thejuster (Member)
Guru^2


Messaggi: 1708
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 13:15
Mercoledì, 04/10/2017
Si scusami nessuno, appena posso ti carico subito il sorgente.


PM Quote
Avatar
Thejuster (Member)
Guru^2


Messaggi: 1708
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 8:28
Giovedì, 05/10/2017
ecco qui nessuno


Ultima modifica effettuata da Thejuster il 05/10/2017 alle 11:21


PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5478
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 10:16
Giovedì, 05/10/2017
Non c'era bisogno di TUTTO il codice con TUTTI i file ma solo di quelli in cui c'era il problema ...

Comunque, mi sembra ci sia una confusione di fondo ... se scrivi (riporto solo la parte necessaria al discorso mettendo ... per saltare il resto)

Codice sorgente - presumibilmente C#

  1. class MapEditor : public QLabel
  2. {
  3.    ...
  4.         enum Type { Obstacle, Event, NPC, PASSABLE };
  5.  
  6.         struct Pice
  7.         {
  8.         public:
  9.                 int x;
  10.                 int y;
  11.    ...
  12.                 Type t;
  13.         };
  14. };
  15.  
  16. void MapEditor::mousePressEvent(QMouseEvent *e)
  17. {
  18.    ... 
  19.         p.t = Event;
  20.    ... 
  21. }


Ultima modifica effettuata da nessuno il 05/10/2017 alle 10:16


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
Thejuster (Member)
Guru^2


Messaggi: 1708
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 14:49
Giovedì, 05/10/2017
Cavolo mai sa che avevo realmente confuso tutto.
Come mai non viene usato un identificatore come accade in c#?

Io in c# per assegnare un valore faccio prima ricorso all'enumeratore e poi gli assegno un valore contenuto nello stesso enumeratore.

Come mai in c++ c'è questa differenza?

Ultima modifica effettuata da Thejuster il 05/10/2017 alle 14:50


PM Quote
Avatar
lumo (Member)
Expert


Messaggi: 420
Iscritto: 18/04/2010

Segnala al moderatore
Postato alle 15:23
Giovedì, 05/10/2017
Ok, in pratica ti manca la conoscenza di base su come funzionano le enumerazioni in C.

In soldoni, supponi di avere
Codice sorgente - presumibilmente C/C++

  1. enum Tipo { Denari, Bastoni, Spade, Coppe };



Puoi usare l'enumerazione così:
Codice sorgente - presumibilmente Plain Text

  1. Tipo t = Denari;



In pratica tutti i valori della enumerazione appartengono allo scope di dichiarzione dell'enum Tipo.
Una piccola nota è che in C avresti dovuto fare
Codice sorgente - presumibilmente C/C++

  1. enum Tipo t = Denari;


Oppure usare un typedef, ma in C++ non serve.

Ora, per ovviare a questo problema, prima del C++11 si faceva così:
Codice sorgente - presumibilmente C/C++

  1. struct Tipo {
  2.     enum Tipo {
  3.        ...
  4.     };
  5. };


La struttura Tipo è fittizia e serve solo a incapsulare l'enum, rimane comunque un po' brutta da usare ma più comprensibile
Codice sorgente - presumibilmente Plain Text

  1. Tipo::Tipo t = Tipo::Denari;


Alternative, usate molto in C, sono usare un prefisso comune a tutti i valori di una stessa enum.

Da C++11 in poi, ti conviene fare così
Codice sorgente - presumibilmente C/C++

  1. enum class Tipo {
  2.    Denari, ...
  3. };
  4.  
  5. Tipo t = Tipo::Denari;



La enum class funziona esattamente come funzionerebbe in C# (o almeno penso, non ricordo niente di C#).

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5478
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 15:48
Giovedì, 05/10/2017
Testo quotato

Postato originariamente da Thejuster:

Cavolo mai sa che avevo realmente confuso tutto.
Come mai non viene usato un identificatore come accade in c#?

Io in c# per assegnare un valore faccio prima ricorso all'enumeratore e poi gli assegno un valore contenuto nello stesso enumeratore.

Come mai in c++ c'è questa differenza?  



No ... non ho capito ... che intendi? Come fai in C# ?


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
Thejuster (Member)
Guru^2


Messaggi: 1708
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 15:59
Giovedì, 05/10/2017
Grazie lumo molto istruttivo il tuo post.
Ora ho capito finalmente bene dove sbagliavo e le differenze quali sono.

In c# e molto simile

Codice sorgente - presumibilmente C/C++

  1. enum tipo { denari, coppe, spade, bastoni };
  2.  
  3.  
  4. stuct carta
  5. {
  6. Int valore;
  7. tipo t;
  8. }
  9.  
  10. carta c = new carta();
  11. c.tipo = tipo.denari;



In c++ credevo bastava mettere al posto di tipo.denari qualcosa di tipo :: denari
Ma ho capito che il doppio punto si aggiunge solo in riferimento di qualche classe e non su altro.
Credevo che lo stesso procedimento era applicato anche per le strutture o tipo @nessuno se hai guardato il mio sorgente su alcune parti

Qpen p;
p.setColor = Qt::Black;

Se ispeziono l'elemento black l'intellisense mi riport l'elemento come tipo int.
Quindi credevo che era un semplice enuneratore e non una classe.

Ultima modifica effettuata da Thejuster il 05/10/2017 alle 16:44


PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo