Structure [Résolu]

Signaler
Messages postés
145
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
21 février 2013
-
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
-
Bojour,j'ai cree cette structure:

typedef struct element element;
struct element
{

    SOCKET socket;
    unsigned int con_type;
    int index;
    BOOL connected;
    char ip[16];
    BOOL p_protected;
    char* u_name;
    char* u_password;
   

};

tout va bien, mais si je declare une variable du type "element", ca plante :(

element test;

erreurs au compilateur (sous Visual studio):

error C2275: 'element' : illegal use of this type as an expression
error C2146: syntax error : missing ';' before identifier 'test'
error C2065: 'test' : undeclared identifier

Merci d'avance

l3KTr0 Was HeRe

8 réponses

Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
C'est sur que ça fonctionne, le problème ne vien pas de là.
Le problème est, d'après ce que je peux en déduire, qu'il doit déclarer une variable comme ceci:

printf("Bonjour");
int Variable;

mais compiler en C.

C++ (@++)<!--
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Tu déclares cette variable où dans ton code ? La seule façon que j'ai d'obtenir cette erreur c'est de déclarer une variable en plein milieu d'une fonction en compilent en C.

C++ (@++)<!--
Messages postés
653
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
10 novembre 2014
2
Ca n'arangera pas ton pb mais c plus facile a lire quand on declare ses strucs comme ca:

typedef struct _element
{
SOCKET socket;
unsigned int con_type;
int index;
BOOL connected;
char ip[16];
BOOL p_protected;
char* u_name;
char* u_password;
}ELEMENT *LPELEMENT;

Neo_Fr
Messages postés
653
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
10 novembre 2014
2
Ooups j'ai oublier une virgule:

typedef struct _element
{
SOCKET socket;
unsigned int con_type;
int index;
BOOL connected;
char ip[16];
BOOL p_protected;
char* u_name;
char* u_password;
}ELEMENT, *LPELEMENT;

Neo_Fr
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
Si t'es en C++ pas besoin de t'embêter :

struct element
{
    SOCKET socket;
    unsigned int con_type;
    int index;
    BOOL connected;
    char ip[16];
    BOOL p_protected;
    char* u_name;
    char* u_password;
};
 
et pas de typedef.
Messages postés
18
Date d'inscription
lundi 12 novembre 2007
Statut
Membre
Dernière intervention
12 décembre 2007

Salut

J'ai teste le bout de code suivant qui semble tourner;
essaie avec un typedef de meme type

tyedef struct _machin
{
tes declaration
}machin;


CA donne ca
----------------------------------

typedef struct _element
{
unsigned int con_type;
int index;
int connected;
char ip[16];
int p_protected;
char* u_name;
char* u_password;
}element;


int
main ( int argc,char* argv [])
{
element test;
test.index=5;
}
--------------------

a++
Messages postés
18
Date d'inscription
lundi 12 novembre 2007
Statut
Membre
Dernière intervention
12 décembre 2007

Le typedef defini un nouveau type associant le nom element au type de la structure voulue donc doit etre global

Les declaration de variable de type element peuvent se faire n'importe ou .

le code ci dessous a ete compile avec un gcc et ne pose pas de pb ni a la compile ni al'execution .

Si le projet a plusieur fichier il doit falloir placer le typedef dans un fichier .h qui pourrat etre inclus dans les fichier l'utilisant.



----------------------------------------

#include <stdio.h>
typedef struct
{
int socket;
unsigned int con_type;
int index;
int connected;
char ip[16];
int p_protected;
char* u_name;
char* u_password;
} element;


int
main ( int argc,char* argv [])
{
printf ("Bonjours main \n");
element test;
test.index=5;
myfunc();
printf (" index; %i\n",test.index);
}


int myfunc()
{
printf ("Bonjours myfunc\n");
element test;
test.index=6;
printf (" index; %i\n",test.index);
}

---------------------------------------
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Nope.
Les compilateur C non C99 (comme l'est le compilateur de VC++) ne permet pas de déclarer une variable n'importe où mais seulement au début de la fonction.

C++ (@++)<!--