l'accès des membres de la structure au sein d'une classe
J'ai un .hpp et .fichier cpp. Je veux accéder à la variable dans la structure au sein d'une classe qui se trouve être dans l'en-tête .php fichier, dans le .fichier cpp.
.php, j'ai
class foo{
public:
struct packet{
int x;
u_int y;
};
};
foo(const char*name)
:m_name(name){}
.rpc j'ai fait:
foo *foo_1 = &foo;
printf("The value of x is : %d",foo_1->packet.x);
printf ("The value of y is : %u", foo_1->packet.y);
De le faire j'ai l'erreur suivante:
code_1.cpp:117: error: expected primary-expression before ‘;’ token
code_1.cpp:118: error: invalid use of ‘struct foo::packet’
code_1.cpp:119: error: invalid use of ‘struct foo::packet’
make: *** [code_1] Error 1
Mon objectif est d'obtenir les valeurs de x et y dans le fichier cpp. Toute suggestion/idée sera vraiment appréciée.
Grâce.
OriginalL'auteur Quick Silver | 2013-06-05
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin d'un objet membre de type
foo::packet
dansclass foo
.Dans votre .rpc, il faut faire:
Vous devez vous rappeler que même si
packet
est à l'intérieur defoo
, il n'est pas inclus dansfoo
en tant que membre de l'objet. C'est juste une classe fermée à l'intérieur d'une autre classe. Et pour une classe à être utilisé, vous devez avoir des objets (une classe peut également être utilisé sans avoir des objets, mais, bon...).C'est un problème avec votre constructeur et, avec tout le respect dû, est hors de la portée de votre question. Désolé.
Pas un problème. Merci pour l'aide. De commentaires ci-dessous indique son une mauvaise idée de déclarer un pointeur sur l'adresse d'une classe. Ça va être un problème, assigining foo_1, l'adresse de foo.
Vous devrez faire face à de nombreux problèmes avec les pointeurs. Mon conseil? Minimiser leur utilisation. Il suffit de ne
foo myFoo;
et vous n'aurez jamais à traiter avec les subtilités de pointeurs.Garcia: C'est jusqu'à ce qu'il essaie de retourner un pointeur vers une variable temporaire qui vient d'arriver à cesser d'exister en tant que la fonction renvoie :/
OriginalL'auteur Mark Garcia
Dans votre classe
Foo
, vous avez défini unpacket
struct, mais vous n'avez pas déclaré de cas. Ce que vous voulez, c'est (c'est un compileable autonome exemple):OriginalL'auteur Kuba Ober
packet
n'est pas un membre de données de la classe, mais la classe qu'il définit est cependant. Vous avez besoin d'instancier un objet de ce type afin de pouvoir l'utiliser de cette façon:Désolé à ce sujet. Vous avez besoin d'ajouter un constructeur par défaut pour votre classe:
foo() {}
. Je vais mettre à jour mon post avec le code.L'a obtenu. Merci pour l'aide.
OriginalL'auteur 0x499602D2
Que vous venez de définir struct.
Essayez quelque chose comme cela -
struct packet{
int x;
u_int y;
}test;
et dans votre rpc, accéder à vos éléments struct comme celui-ci
foo_1.test.x
OriginalL'auteur 22kar
La
struct
déclaration dans la classe ne permet pas de créer une instance de la peine qu'il définit comme une structure au sein defoo
.Si vous créez une structure d'une instance de la classe, vous pouvez référencer le pointeur contenant:
Maintenant, vous pouvez dire
foo_1->m_packet.x = 3;
, etc.Aussi, vous devez créer une instance de foo (dans votre code, vous essayez de prendre l'adresse du nom de la classe, qui ne fonctionne pas):
foo* foo_1 = new foo;
Puis,
delete foo_1
quand fait avec elle.OriginalL'auteur edtheprogrammerguy
La classe foo n'ont pas un membre de paquets, mais il contient une autre classe/type struct nommé "paquet".
Vous devrez fournir un des membres de ce type.
Ne pouvez pas faire un test de l'atm, mais vous pourrait essayer
ou
Pour accéder à x et y via
foo_ptr->packet.(...)
oufoo_object.packet.(...)
.OriginalL'auteur Pixelchemist
et d'ailleurs tha paquets liés à des affaires,
foo *foo_1 = &foo;
est mauvais, vous ne pouvez pas prendre l'adresse d'une seule classe d'une variable.OriginalL'auteur Balog Pal
.php, vous devez déclarer une variable de type struct.
Par exemple,
à l'intérieur de votre classe
.rpc, essayez cette
OriginalL'auteur Eric Duhun Kim
Vous déclarer la structure, mais vous n'avez jamais mettre toutes les données dans l'.
OriginalL'auteur Marichyasana
Essayer
espérant que cela puisse vous aider
nous avons donné le nom de la structure que V1 et acessing les éléments par l'utilisation de l'opérateur de point
OriginalL'auteur Hemanth Kumar