Classes dans .h [C++] - Programmation
Marsh Posté le 16-07-2001 à 09:49:32
C'est bizarre que ça compile sans warning.
Tu as surement déclaré ta variable de cette façon dans le .h
int var1;
Dans ce cas une variable 'var1' est crée dans chaque cpp où est inclus ton .h
il faut mettre dans le .h
externe int var1;
et mettre dans un et un seul des .cpp
int var1;
Marsh Posté le 16-07-2001 à 10:22:29
Non attends...c'est un membre de la classe ?? Je comprends rien a ton histoire !
Tu peux nous donner ton code a prb exactement ?
Marsh Posté le 16-07-2001 à 11:01:57
Ben oui Seblamb, mais si je veux utiliser cette variable dans plusieurs .cpp ?
Voici les codes :
le.h :
class SOCK
{
public:
SOCKET c;
};
1er.cpp :
#include "le.h"
SOCK sk;
sk.c = socket(AF_INET,SOCK_STREAM,0);
//...Ce cpp marche impec puisque c lui qui crée la socket.
2e.cpp (ou il peut pas lire la socket) :
SOCK sock;
send(sock.c,msg,sizeof(msg),0);
Marsh Posté le 16-07-2001 à 11:11:04
J'avais pas bien compris mais c'est un problème du même ordre:
tu crées 2 objets sock différents (sk et sock)
Tu en initialises 1 mais le deuxieme n'a aucun rapport avec le 1er.
Pour pouvoir utiliser un objet SOCK dans 2 cpp différent.
il faut que tu déclares dans un et un seul .cpp ( j'insiste lourdement)
SOCK sock;
et dans ton .h
extern SOCK sock;
extern permet au compilateur de savoir qu'un variable de type SOCK sera présente dans to programme même si elle n'est pas déclaré explicitement dans le .cpp
Le lien avec cette variable se fera au moment du link.
Marsh Posté le 16-07-2001 à 09:43:55
Je rencontre actuellement un problème très lourd :
je fais un .h avec la déclaration d'une classe avec une variable dedans.
Lorsque j'accède à cette classe à partir du .cpp qui affecte une valeur à la variable de la classe, tout marche, je peux lire la variable.
Mais quand je veux accèder à cette même variable, une fois qu'elle a reçu une valeur, à partir d'un autre .cpp, et bien là, la variable me semble vide !
Je n'arrive pas à récupérer son contenu, et c pareil avec un 3ème .cpp.
Ca compile sans problèmes, mais ça marche pas !