Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[Debutant] include avec des struct

6 réponses
Avatar
lecyborg
bonjour à tous,

j'aimerai savoir comment faire pour qu'une struct CUSTOMVERTEX définie dans
Mesh.h par exemple soit reconnue dans Engine.h quand j'include le Mesh.h
dans le Engine.h.

actuellement j'ai declaré ma struct CUSTOMVERTEX dans ma classe Mesh, avant
les 'private:' et 'public:'
et si je veux m'en servir dans la classe Engine il la reconnait pas.

merci d'avance pour votre aide.

6 réponses

Avatar
drkm
"lecyborg" writes:

bonjour à tous,

j'aimerai savoir comment faire pour qu'une struct CUSTOMVERTEX
définie dans Mesh.h par exemple soit reconnue dans Engine.h quand
j'include le Mesh.h dans le Engine.h.

actuellement j'ai declaré ma struct CUSTOMVERTEX dans ma classe
Mesh, avant les 'private:' et 'public:' et si je veux m'en servir
dans la classe Engine il la reconnait pas.


D'après ce que je comprends, tu as quelque chose du genre :

// Mesh.h
class Mesh
{
struct CUSTOMVERTEX { } ;
} ;

Si tu n'indiques pas de qualificateur d'accès [1], tu es par défaut
dans une section privée pour les classes, et publique pour les
structures. Par exemple :

class UneClass
{
// section privée
private:
// ici aussi
public:
// section publique
} ;

struct UneStructure
{
// section publique
public:
// ici aussi
private:
// section privée
} ;

Je ne sais pas si c'est là ton problème, mais peut-être essaies-tu
d'accéder à la structure dans un bout de code qui n'est pas déclaré en
tant qu'ami de `Mesh´.

[1] Est-ce bien le bon terme pour désigner `public´, `private´ et
`protected´ ?

--drkm

Avatar
lecyborg
il fallait declarer ma struc ds la partie publique de la classe, et mettre
la partie publique avant la partie privee (pour utiliser le type
CUSTOMVERTEX ds la section privee).

merci pour ta reponse.
Avatar
drkm
"lecyborg" writes:

il fallait declarer ma struc ds la partie publique de la classe, et
mettre la partie publique avant la partie privee (pour utiliser le
type CUSTOMVERTEX ds la section privee).


Deux petite remarques :

- en général, on réserve les noms entièrement en majuscules aux
macros de préprocesseur ;

- il est souvent intéressant de mettre d'abord la partie publique,
suivie de la partie privée, dans les classes et structures.

La seconde remarque vient du fait qu'elle expose d'abord clairement
la partie publique, qui intéresse autant l'implémenteur de la classe
que ses utilisateurs. Vient ensuite la partie privée, qui n'intéresse
pas tout le monde (normalement uniquement l'implémenteur de la
classe). Il est donc plus logique de mettre la section privée plus
loin dans la définition de la classe.

Mais ceci est principalement une histoire de goût.

--drkm

Avatar
drkm
"mohamed JBARI" writes:

tu peux définir ta structure à l'extérieur de la classe, ensuite tu
peux t'en servir en déclarant une variable membre de type
CUSTOMVERTEX à l'intérieur de la classe Mesh.


Il peut également la définir à l'intérieur de la classe, si c'est ce
qu'il veut faire. Les deux méthodes ne sont pas équivalentes, et la
solution fort simple.

--drkm

Avatar
lecyborg
j'ai revu mon code:
à cet instant, ma structure est declarée ds la section publique de ma classe
Mesh ds Mesh.h

cependant contrairement a ce que j'ai dit avant, elle n'est pas reconnue
dans la classe Engine du fichier Engine.h dont une des premieres ligne est :
#include "Mesh.h".

donc mon probleme n'est pas regle.

quand à tes remarques drkm, j'en tiendrai compte à l'avenir, spécialement
lordre des sections qui me parait mieux en effet.
Avatar
drkm
"lecyborg" writes:

j'ai revu mon code: à cet instant, ma structure est declarée ds la
section publique de ma classe Mesh ds Mesh.h

cependant contrairement a ce que j'ai dit avant, elle n'est pas
reconnue dans la classe Engine du fichier Engine.h dont une des
premieres ligne est :
#include "Mesh.h".

donc mon probleme n'est pas regle.


Utilises-tu bien la syntaxe suivante pour accéder à ta structure
imbriquée :

Mesh::CUSTOMVERTEX

--drkm