Est-ce qu'un struct
ont un constructeur en C++ ?
J'ai essayé de résoudre ce problème mais je n'arrive pas à obtenir la syntaxe.
Est-ce qu'un struct
ont un constructeur en C++ ?
J'ai essayé de résoudre ce problème mais je n'arrive pas à obtenir la syntaxe.
@sth Vous avez raison sur la différence entre struct et class, cependant je pense qu'il a un problème de compilation. Le problème peut être dû à une union qui utilise la structure. Vous ne pouvez pas avoir de constructeurs non triviaux dans le type que vous avez dans une union.
@Chap : S'il a des problèmes concrets où la solution générale ne fonctionne pas, ce serait probablement la meilleure idée de poster du code qui montre le problème et les erreurs de compilation qui sont générées. Mais vu que la question est posée de manière générale, je ne pense pas que l'on puisse en déduire grand chose sur le problème concret que le PO essaie de résoudre...
Cela ne fonctionnera pas si vous héritez d'une autre classe et que la variable est déchargée dans la classe parente.
Toutes les réponses ci-dessus répondent techniquement à la question de l'auteur de la demande, mais j'ai pensé qu'il fallait signaler un cas où vous pourriez rencontrer des problèmes.
Si vous déclarez votre structure comme ceci :
typedef struct{
int x;
foo(){};
} foo;
Vous aurez des problèmes en essayant de déclarer un constructeur. C'est bien sûr parce que vous n'avez pas réellement déclaré une structure nommée "foo", vous avez créé une structure anonyme et lui avez attribué l'alias "foo". Cela signifie également que vous ne serez pas en mesure d'utiliser "foo" avec un opérateur de scoping dans un fichier cpp :
foo.h :
typedef struct{
int x;
void myFunc(int y);
} foo;
foo.cpp :
//<-- This will not work because the struct "foo" was never declared.
void foo::myFunc(int y)
{
//do something...
}
Pour résoudre ce problème, vous devez soit faire ceci :
struct foo{
int x;
foo(){};
};
ou ceci :
typedef struct foo{
int x;
foo(){};
} foo;
Alors que cette dernière crée une structure appelée "foo" et lui donne l'alias "foo" afin que vous n'ayez pas à utiliser l'attribut struct
lorsqu'on y fait référence.
Comme le mentionnent les autres réponses, un struct est traité comme une classe en C++. Cela vous permet d'avoir un constructeur qui peut être utilisé pour initialiser la structure avec des valeurs par défaut. Ci-dessous, le constructeur prend sz
et b
comme arguments, et initialise les autres variables à certaines valeurs par défaut.
struct blocknode
{
unsigned int bsize;
bool free;
unsigned char *bptr;
blocknode *next;
blocknode *prev;
blocknode(unsigned int sz, unsigned char *b, bool f = true,
blocknode *p = 0, blocknode *n = 0) :
bsize(sz), free(f), bptr(b), prev(p), next(n) {}
};
Utilisation :
unsigned char *bptr = new unsigned char[1024];
blocknode *fblock = new blocknode(1024, btpr);
Oui, mais si vous avez votre structure dans un syndicat, vous ne pouvez pas. C'est la même chose qu'une classe.
struct Example
{
unsigned int mTest;
Example()
{
}
};
Les unions n'autorisent pas les constructeurs dans les structs. Vous pouvez cependant créer un constructeur sur l'union. Cette question concerne les constructeurs non triviaux dans les unions.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.