PDA

View Full Version : [C] invalid type argument of ‘->’


cifa
10-09-2011, 18:52
Salve a tutti,
sono un grande newbie per quel che riguarda C e vi volevo chiedere il perchè mi da il seguente errore: invalid type argument of ‘->’ (have ‘Hand’)

quando faccio qualcosa del tipo: int min1=m1->mano[0]->numero;

Dove si ha:


enum seme{
Cuori,
Quadri,
Fiori,
Picche
};
typedef enum seme Seme;

struct card{
int numero; // 1-13
Seme seme;
};
typedef struct card Card;

struct mano{
Card mano[5];
};
typedef struct mano Hand;



Son sicuro che è prorpio una mia mancanza a livello teorico, grazie a tutti per le eventuali risposte :)

ndakota
10-09-2011, 19:05
Salve a tutti,
sono un grande newbie per quel che riguarda C e vi volevo chiedere il perchè mi da il seguente errore: invalid type argument of ‘->’ (have ‘Hand’)

quando faccio qualcosa del tipo: int min1=m1->mano[0]->numero;

Dove si ha:


enum seme{
Cuori,
Quadri,
Fiori,
Picche
};
typedef enum seme Seme;

struct card{
int numero; // 1-13
Seme seme;
};
typedef struct card Card;

struct mano{
Card mano[5];
};
typedef struct mano Hand;



Son sicuro che è prorpio una mia mancanza a livello teorico, grazie a tutti per le eventuali risposte :)

Prova così


int min1 = m1.mano[0].numero;

cifa
10-09-2011, 19:08
Prova così


int min1 = m1.mano[0].numero;


Così sembra andare, qual'è la differenza fra l'operatore '->' e l'operatore '.' ? Cioè perchè in questo caso -> non va, mentre . sì ?

Grazie anche per la risp di sopra :)

Penso di averlo capito da me, in pratica se opero con puntatori a strutture uso ->, se opero direttamente su di una struttura devo usare '.', giusto ?

AngeL)
10-09-2011, 19:18
Penso di averlo capito da me, in pratica se opero con puntatori a strutture uso ->, se opero direttamente su di una struttura devo usare '.', giusto ?

Esatto.

Più formalmente,pStruttura->elemento;equivale a(*pStruttura).elemento;Cioè, prima dereferenzia il puntatore e poi legge il campo richiesto.

Questo, ovviamente, se hai a che fare con un puntatore a struttura. Se hai già la struttura, tipo:struct MiaStruttura {
int elemento;
//...
};

MiaStruttura str;puoi solo accedere all'elemento di str con l'operatore punto.str.elemento;