inclure typedef dans un en-tête de classe
C'est ma tête:
#ifndef TIMING_H
#define TIMING_H
#define MAX_MESSAGES 1000
typedef Message* MessageP; //inside the class?
class Timing {
public:
Timing();
private:
struct Message {
Agent *_agent;
double _val;
};
MessageP* _msgArr;
int _waitingMsgs;
};
Ma question est: dois-je placer la définition de type à l'intérieur de la classe bloc sur la droite au-dessus de MessageP* _msgArr ou est-il OK pour le placer près de tous les #define?
Il n'a pas de sortie des erreurs de compilation, donc je ne suis pas sûr à ce sujet.
source d'informationauteur Asher Saban
Vous devez vous connecter pour publier un commentaire.
En dehors de la classe, ce type doit être considéré comme
Timing::Message
doncMais ce n'est possible qu'après la déclaration de
Timing::Message
encoreMessageP
est utilisé avant la déclaration deTiming
est complet, il n'est donc pas possible.En outre, la structure est un
private:
membre, de sorte que vous ne pouvez pas définir ce en dehors de toute façon. Letypedef
doit être fait à l'intérieur de laTiming
classe.Vous n'avez pas d'erreur de compilation probablement parce que l'autre
Message
type dans la portée globale existe déjà.Mettre le
typedef
dans un endroit où il fait sens.De le mettre au dessus signifie que vous injectez de l'alias à l'espace de noms global portée. Mettre à l'intérieur de la classe peut dire que c'est le monde visible ou accessible uniquement aux membres (et/ou des sous-classes de celle-ci) en fonction de l'accès le plus proche spécificateur (ou
private
si il n'y a pas tout).Si les clients de la classe n'a pas besoin de savoir à propos de cette alias le marquer comme privé.
Si vous vous mettez à l'intérieur de la classe: note toutefois que, en dehors de la classe, vous en aurez besoin pour obtenir le nom que
Timing::MessageP
ou l'autre besoin d'unusing Timing::MessageP
directive de portée. Aussi, plein de qualification peut être fait seulement une fois que la classe a été définie (vous ne pouvez pas créer des alias pour les incomplète types -- avant de déclarerTiming
ne sera donc pas de travail).C'est OK pour sortir au sommet. Cependant, il n'est pas une bonne pratique à mettre dans une portée mondiale, comme les autres cités.