Erreur Structure - left of ... must have struct/union type
Résolu/Fermé
BV91
Messages postés
15
Date d'inscription
vendredi 12 avril 2013
Statut
Membre
Dernière intervention
21 mai 2013
-
19 avril 2013 à 10:48
BV91 Messages postés 15 Date d'inscription vendredi 12 avril 2013 Statut Membre Dernière intervention 21 mai 2013 - 20 avril 2013 à 18:36
BV91 Messages postés 15 Date d'inscription vendredi 12 avril 2013 Statut Membre Dernière intervention 21 mai 2013 - 20 avril 2013 à 18:36
A voir également:
- Expression must have struct or union type
- Or - Guide
- Dimension bbox must - Accueil - Guide box et connexion Internet
- Trait d'union insécable word - Guide
- Expression écrite cm1 cm2 télécharger gratuit - Télécharger - Éducatifs
- Clear type - Guide
4 réponses
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
19 avril 2013 à 11:17
19 avril 2013 à 11:17
Salut.
Dans la fonction retournant une erreur, registre est un entier et pas une structure, modifie son type, ainsi que le type de retour de ShowRegS et surtout faire retourner une valeur à cette fonction. Mais je ne sais pas ce que tu controles, tu n'initialises nulle part ta variable.
Dans la fonction retournant une erreur, registre est un entier et pas une structure, modifie son type, ainsi que le type de retour de ShowRegS et surtout faire retourner une valeur à cette fonction. Mais je ne sais pas ce que tu controles, tu n'initialises nulle part ta variable.
Utilisateur anonyme
Modifié par nagashima le 19/04/2013 à 11:21
Modifié par nagashima le 19/04/2013 à 11:21
salut !
Je vais peu être dire n'importe quoi mais tu déclare un entier :
auquel tu attribut une valeur :
Je suppose que showRegS renvoi un entier (ce qui n'est pas le cas)
ensuite tu fais :
Sur un int c'est pas possible (d'où le message), mais sur ta structure oui.
de même, petite note : tu déclare ta fonction qui retourne un entier :
Mais tu renvois un booléen (ce qui en soit n'est pas faux, mais c'est pas top) Seulement si tu rentre dans un de tes tests, mais pas dans le cas ou aucuns test n'est vérifié.
Essaye plutot :
ou : (si la portée de ta strucutre le permet)
naga
Je vais peu être dire n'importe quoi mais tu déclare un entier :
int registre = 0;
auquel tu attribut une valeur :
registre = ShowRegS();
Je suppose que showRegS renvoi un entier (ce qui n'est pas le cas)
ensuite tu fais :
registre.c4
Sur un int c'est pas possible (d'où le message), mais sur ta structure oui.
de même, petite note : tu déclare ta fonction qui retourne un entier :
int Number2RegS()
Mais tu renvois un booléen (ce qui en soit n'est pas faux, mais c'est pas top) Seulement si tu rentre dans un de tes tests, mais pas dans le cas ou aucuns test n'est vérifié.
Essaye plutot :
bool Number2RegS() { if(isdigit(ShowRegS().c1) == 0) // sin non, retourner un booléen faux { return false; } if(isdigit(ShowRegS().c2) == 0) { return false; } if(isdigit(ShowRegS().c3) == 0) { return false; } if(isdigit(ShowRegS().c4) == 0) // sin non, retourner un booléen faux { return false; } return true; }
ou : (si la portée de ta strucutre le permet)
bool Number2RegS() { MonRegistre registre = ShowRegS(); if(isdigit(registre .c1) == 0) // sin non, retourner un booléen faux { return false; } if(isdigit(registre .c2) == 0) { return false; } if(isdigit(registre .c3) == 0) { return false; } if(isdigit(registre .c4) == 0) // sin non, retourner un booléen faux { return false; } return true; }
naga
BV91
Messages postés
15
Date d'inscription
vendredi 12 avril 2013
Statut
Membre
Dernière intervention
21 mai 2013
19 avril 2013 à 11:38
19 avril 2013 à 11:38
Merci naga pour ta réponse !
En effet, je me suis emmêlé les pinceux... :$
J'ai donc changé le type de retour de Number2RegS pour qu'il devienne "bool".
La variable registre n'est pas de type int, plutôt il s'agit d'une structure.
En effet, je me suis emmêlé les pinceux... :$
J'ai donc changé le type de retour de Number2RegS pour qu'il devienne "bool".
La variable registre n'est pas de type int, plutôt il s'agit d'une structure.
BV91
Messages postés
15
Date d'inscription
vendredi 12 avril 2013
Statut
Membre
Dernière intervention
21 mai 2013
19 avril 2013 à 11:45
19 avril 2013 à 11:45
J'ai corrigé la déclaration de mes variables.
Comme je l'ai dit là-haut, il faut que le type de ma fonction ShowRegS soit une structure sinon error C2115: 'return' : incompatible types... :(
Comme je l'ai dit là-haut, il faut que le type de ma fonction ShowRegS soit une structure sinon error C2115: 'return' : incompatible types... :(
ah mais j'ai raté quelque chose !
déjà :
ne renvois rien, donc bon.
tu souhaites tester c1,c2,c3 et c4
essaye donc :
avec
après tu n'initalise pas le registre :
peut-être voulais-tu faire un "scanf" ?
déjà :
int ShowRegS() { struct MonRegistre registre; // registre est de type MonRegistre printf("%llu",registre.c1); printf("%llu",registre.c2); printf("%llu",registre.c3); printf("%llu",registre.c4); }
ne renvois rien, donc bon.
tu souhaites tester c1,c2,c3 et c4
essaye donc :
int[] ShowRegS() { int[] a = news int[4]; struct MonRegistre registre; // registre est de type MonRegistre printf("%llu",registre.c1); printf("%llu",registre.c2); printf("%llu",registre.c3); printf("%llu",registre.c4); a[0]=registre.c1; a[1]=registre.c2; a[2]=registre.c3; a[3]=registre.c4; return a; }
avec
bool Number2RegS() { int[] registre = ShowRegS(); if(isdigit(registre[0]) == 0) // sin non, retourner un booléen faux { return false; } if(isdigit(registre[1]) == 0) { return false; } if(isdigit(registre[2]) == 0) { return false; } if(isdigit(registre[3]) == 0) // sin non, retourner un booléen faux { return false; } return true; }
après tu n'initalise pas le registre :
struct MonRegistre registre; // registre est de type MonRegistre printf("%llu",registre.c1); printf("%llu",registre.c2); printf("%llu",registre.c3); printf("%llu",registre.c4);
peut-être voulais-tu faire un "scanf" ?
BV91
Messages postés
15
Date d'inscription
vendredi 12 avril 2013
Statut
Membre
Dernière intervention
21 mai 2013
Modifié par BV91 le 19/04/2013 à 12:04
Modifié par BV91 le 19/04/2013 à 12:04
Donc on enregistre les valeurs du registre dans un tableau ?
J'ai une erreur de syntaxe par contre : error C2059: syntax error : '[' au tout début de la fonction ShowRegS :
J'ai ajouté une ligne de scanf aussi :
Et pareil aussi pour le commencement de la fonction Number2RegS :
J'ai une erreur de syntaxe par contre : error C2059: syntax error : '[' au tout début de la fonction ShowRegS :
int[] a = news int[4];
J'ai ajouté une ligne de scanf aussi :
struct MonRegistre registre; // registre est de type MonRegistre scanf("%llu", & registre); // je demande à l'utilisateur de me donner une valeur pour le registre
Et pareil aussi pour le commencement de la fonction Number2RegS :
int[] registre = ShowRegS();j'ai cette erreur : error C2143: syntax error : missing ';' before '['
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
19 avril 2013 à 12:13
19 avril 2013 à 12:13
Quelle prise de tête pour rien ! Il suffit simplement de retourner la structure !
Es tu sur que ton scanf va bien faire ce que tu attends de lui ? a mon avis, il ne t'initialisera que "c1", d'après les langueurs que tu écris dans tes fonctions.
struct MonRegistre ShowRegS() { struct MonRegistre registre; // registre est de type MonRegistre scanf("%llu", ®istre); // je demande à l'utilisateur de me donner une valeur pour le registre printf("%llu",registre.c1); printf("%llu",registre.c2); printf("%llu",registre.c3); printf("%llu",registre.c4); return registre; };
Es tu sur que ton scanf va bien faire ce que tu attends de lui ? a mon avis, il ne t'initialisera que "c1", d'après les langueurs que tu écris dans tes fonctions.
BV91
Messages postés
15
Date d'inscription
vendredi 12 avril 2013
Statut
Membre
Dernière intervention
21 mai 2013
20 avril 2013 à 18:36
20 avril 2013 à 18:36
Prise de tête pour moi, oui, car je démarre... :-)
Merci pour ta réponse qui m'a fait sortir du tourbillon !
Merci pour ta réponse qui m'a fait sortir du tourbillon !
[Dal]
Messages postés
6204
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
27 février 2025
1 104
19 avril 2013 à 13:04
19 avril 2013 à 13:04
Salut BV91,
Juste une observation en passant, indépendante de ta question (à laquelle, je crois, on est bien en mal de répondre car tout est très confus, et on n'a que des bouts de code peu cohérents).
Si tu fais ta "modélisation" de code pour du C destiné à être embarqué, reste vraiment sur du C pur, pas de mélanges avec C++, et sur un standard conservateur (C89). Le travail d'adaptation sera moins important.
"true" ou false" n'existent pas (faux est 0, et vrai toute valeur autre que 0).
new (c'est quoi "news" ?) c'est du C++, l'allocation de mémoire c'est avec malloc
Dal
Juste une observation en passant, indépendante de ta question (à laquelle, je crois, on est bien en mal de répondre car tout est très confus, et on n'a que des bouts de code peu cohérents).
Si tu fais ta "modélisation" de code pour du C destiné à être embarqué, reste vraiment sur du C pur, pas de mélanges avec C++, et sur un standard conservateur (C89). Le travail d'adaptation sera moins important.
"true" ou false" n'existent pas (faux est 0, et vrai toute valeur autre que 0).
new (c'est quoi "news" ?) c'est du C++, l'allocation de mémoire c'est avec malloc
Dal
[Dal]
Messages postés
6204
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
27 février 2025
1 104
Modifié par [Dal] le 19/04/2013 à 15:44
Modifié par [Dal] le 19/04/2013 à 15:44
Autre chose BV91, si on se fie à ton scanf, le contenu de la struct c1, c2, c3 et c4 seraient des "unsigned long long int". c'est pas un peu gros pour des "registres" ?
De plus, si tu testes avec isdigit, ce sont des valeurs ASCII de caractères de 0 à 9 qui sont testées... c1, c2, c3 et c4 ce ne serait pas pour caractère 1, caractère 2, caractère 3, et caractère 4 ?
Si c1, c2, c3 et c4 sont sensés être des représentations ASCII de chiffres de 0 à 9, char me parait être le type à utiliser pour ta structure.
Mais... ton "registre" ne va pas contenir des chars, mais un entier sur 16 bits.
Donc, comme évoqué dans ce sujet précédent, cela suppose que tu te fasses une fonction qui prend en entrée un entier, vérifie qu'il est entre 0 et 9999 et renvoie une chaîne de caractères avec sprintf(chaine, "%04d", contenu_reg);
Mais bon, c'est toi qui vois ce que tu veux faire et comment :-)
Dal
De plus, si tu testes avec isdigit, ce sont des valeurs ASCII de caractères de 0 à 9 qui sont testées... c1, c2, c3 et c4 ce ne serait pas pour caractère 1, caractère 2, caractère 3, et caractère 4 ?
Si c1, c2, c3 et c4 sont sensés être des représentations ASCII de chiffres de 0 à 9, char me parait être le type à utiliser pour ta structure.
Mais... ton "registre" ne va pas contenir des chars, mais un entier sur 16 bits.
Donc, comme évoqué dans ce sujet précédent, cela suppose que tu te fasses une fonction qui prend en entrée un entier, vérifie qu'il est entre 0 et 9999 et renvoie une chaîne de caractères avec sprintf(chaine, "%04d", contenu_reg);
Mais bon, c'est toi qui vois ce que tu veux faire et comment :-)
Dal
Modifié par BV91 le 19/04/2013 à 11:49
Pour le type de retour de ShowRegS, je ne sais pas quel type il faut mettre. J'ai essayé void (comme je fais juste de l'affichage) mais ça ne marche pas... J'ai donc ajouté un "return" à ShowRegS comme tu me l'as indiqué :
Je suis consciente que int n'est pas compatible avec la structure "registre" que je "return"... Y aurait-il une façon pour donner le bon type de retour à ma fonction ShowRegS ?
J'ai oublié d'initialiser la variable "registre" à contrôler. En effet, la structure registre que je dois contrôler est le output de la fonction ShowRegS :
Merci encore.
19 avril 2013 à 13:34
PS : peux donner la déclaration de ta structure ?