Static Const Initialisation de la Structure de Tableau dans la Classe C++
Je comprends, si je veux un const tableau dans une classe de l'espace de noms en C++ je ne peut pas faire:
class c
{
private:
struct p
{
int a;
int b;
};
static const p pp[2];
};
const c::p pp[2] = { {1,1},{2,2} };
int main(void)
{
class c;
return 0;
}
Que je doit faire:
class c
{
public:
struct p
{
int a;
int b;
};
static const p pp[2];
};
const c::p pp[2] = { {1,1},{2,2} };
int main(void)
{
class c;
return 0;
}
Mais cela nécessite un "p" et "pp" pour être publique, quand je veux qu'ils soient privés. Il n'y a pas moyen en C++ à l'initialisation d'privé tableaux statiques?
MODIFIER: -------------------
Merci pour les réponses. En plus j'ai envie de cette classe à être une bibliothèque, des fichiers d'en-tête uniquement, à utiliser par un projet principal. Y compris les suivantes initialiser les résultats "de plusieurs définition des" erreurs lors de l'inclusion en plusieurs fichiers.
const c::p c::pp[2] = { {1,1},{2,2} };
Comment puis-je résoudre ce problème?
- En outre, la question réelle des réponses, en C++
(void)
est inutile et mauvaise pratique, tout commeclass c
n'est rien. Vous avez besoin d'avoirint main() { c varname; return 0; }
- Merci - pourquoi est - (void) mauvaise pratique?
- (void) ne fait pas de mal, mais il ne fait pas bon non plus. Il est pris en charge pour la compatibilité avec le C, mais cela pourrait changer dans les versions futures.
Vous devez vous connecter pour publier un commentaire.
Votre premier extrait de code fonctionne très bien. Vous avez juste besoin de le modifier:
c::pp
restera non initialisé alors qu'un::pp
tableau est créé et initialisé.La plupart du temps vous ne devriez pas avoir privé des membres statiques et de l'extrait de je voir celui-ci ne fait pas exception.
Au lieu de cela, vous retirez la structure de la visibilité au total, de le mettre et de l'instance dans l'anonyme de l'espace de noms de la compilation de l'unité où votre classe de fonctions.
Les utilisateurs de la classe, n'ont pas besoin de voir le détail de l'implémentation.
Une exception serait le cas où la structure ou d'un membre statique en fonction des besoins d'accès aux membres privés de la classe. Si c'est le cas, vous devez au moins déclarer son existence comme un ami dans la classe d'en-tête de sorte que vous ne perdez rien pour vraiment en la déclarant statique une fois que vous avez à montrer qu'il est là de toute façon.
Vous devez qualifier
pp
avecc::
comme dansconst c::p c::pp[2] = { {1,1},{2,2} };
Sinon, vous êtes en essayant de définir un nouveau tableau de la portée mondiale à la place de l'initialisation du membre.