Oppure

Loading
04/10/17 11:12
@TheJuster ... io ho compilato correttamente ... però se non provo il tuo codice non posso capire dove sbagli ...

Te l'avevo già chiesto ma se non puoi/vuoi, almeno dillo ...
04/10/17 11:15
Thejuster
Si scusami nessuno, appena posso ti carico subito il sorgente.
mire.forumfree.it/ - Mire Engine
C# UI Designer
05/10/17 6:28
Thejuster
ecco qui nessuno

Ultima modifica effettuata da Thejuster 05/10/17 9:21
mire.forumfree.it/ - Mire Engine
C# UI Designer
05/10/17 8:16
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)

class MapEditor : public QLabel
{
   ...
	enum Type { Obstacle, Event, NPC, PASSABLE };

	struct Pice
	{
	public:
		int x;
		int y;
   ...
		Type t;
	};
};

void MapEditor::mousePressEvent(QMouseEvent *e)
{
   ...	
	p.t = Event;
   ...	
}
Ultima modifica effettuata da 05/10/17 8:16
05/10/17 12:49
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?
Ultima modifica effettuata da Thejuster 05/10/17 12:50
mire.forumfree.it/ - Mire Engine
C# UI Designer
05/10/17 13:23
lumo
Ok, in pratica ti manca la conoscenza di base su come funzionano le enumerazioni in C.

In soldoni, supponi di avere
 enum Tipo { Denari, Bastoni, Spade, Coppe };


Puoi usare l'enumerazione così:
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
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ì:
struct Tipo {
    enum Tipo {
       ...
    };
};

La struttura Tipo è fittizia e serve solo a incapsulare l'enum, rimane comunque un po' brutta da usare ma più comprensibile
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ì
enum class Tipo {
   Denari, ...
};

Tipo t = Tipo::Denari;


La enum class funziona esattamente come funzionerebbe in C# (o almeno penso, non ricordo niente di C#).
aaa
05/10/17 13:48
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# ?
05/10/17 13:59
Thejuster
Grazie lumo molto istruttivo il tuo post.
Ora ho capito finalmente bene dove sbagliavo e le differenze quali sono.

In c# e molto simile

enum tipo { denari, coppe, spade, bastoni };


stuct carta 
{
Int valore;
tipo t;
}

carta c = new carta();
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 05/10/17 14:44
mire.forumfree.it/ - Mire Engine
C# UI Designer