2009-07-22 5 views
1

J'ai un code suivant une (version simplifiée):Declare taille du tableau dans le fichier d'en-tête sans #define de

#define MESSAGE_SIZE_MAX 1024 
#defined MESSAGE_COUNT_MAX 20 

class MyClass { 
public: 
    .. some stuff 
private: 
    unsigned char m_messageStorage[MESSAGE_COUNT_MAX*MESSAGE_SIZE_MAX]; 
}; 

Je n'aime pas, qui définit sont visibles à tous les utilisateurs de MyCalss.

Comment puis-je le faire dans le style C++?

Merci Dima

Répondre

5

L'astuce pour obtenir des choses dans la définition class est,

// public: 
enum {MESSAGE_SIZE_MAX=1024, MESSAGE_COUNT_MAX=20}; 

Je ne ai jamais aimé #defines à utiliser comme des constantes.
C'est toujours une bonne pratique d'utiliser enum. Pourquoi ne pas simplement utiliser une constante?

6

Notez qu'à la différence de C, C++ fait que les variables constantes dans la portée globale ont une liaison statique par défaut. La variable constante ci-dessus est une expression constante et, en tant que telle, peut être utilisée pour spécifier des tailles de tableau.

char message[message_size_max]; 
+0

Il sera lié statiquement dans tous les objets en utilisant MyClass et leur ajoutant ainsi des déchets. – dimba

+0

Si c'est le cas, alors vous avez un ancien compilateur ou vous prenez l'adresse de la constante quelque part. – avakar

Questions connexes