C/C++ privé initialisation de tableau dans le fichier d'en-tête
J'ai une classe appelée " Cal " et " il est .rpc et .h homologue
Headerfile a
class Cal {
private:
int wa[2][2];
public:
void do_cal();
};
.fichier cpp a
#include "Cal.h"
void Cal::do_cal() {
print(wa) //where print just itterates and prints the elements in wa
}
Ma question est comment puis-je initialiser le tableau wa
? Je n'arrive pas à le faire fonctionner.
J'ai essayé avec :
int wa[2][2] = {
{5,2},
{7,9}
};
dans le fichier d'en-tête, mais j'ai des erreurs en disant: je ne peux pas le faire, car cela va à l'encontre de la norme iso..quelque chose.
Essayé également d'initialiser le tableau wa
dans le constructeur, mais qui n'a pas fonctionné non plus.. Ce qui me manque ?
Grâce
OriginalL'auteur Milan | 2009-02-06
Vous devez vous connecter pour publier un commentaire.
Si elle peut être statique, vous pouvez l'initialiser dans votre .fichier cpp. Ajoutez le mot-clé static dans la déclaration de classe:
et à la portée de fichier dans le .fichier cpp ajouter:
Si vous n'avez jamais le changer, ce serait bien travailler (avec s'il const). On en a un seul qui est partagé à chaque instance de votre classe.
OriginalL'auteur Rob K
Vous ne pouvez pas initialiser les éléments du tableau dans une déclaration de classe. Récemment, j'ai essayé de trouver un moyen de le faire. De ce que j'ai appris, que vous avez à faire dans votre fonction d'initialisation, un élément à la fois.
Il est possible (et probable) qu'il y a une bien meilleure façon de le faire, mais d'après mes recherches, la semaine dernière, c'est comment le faire avec un tableau multi dimensionnel.
Je suis intéressé si quelqu'un a une meilleure méthode.
OriginalL'auteur Perchik
Vous ne pouvez pas le faire facilement. Si vous ne voulez pas spécifier de chaque élément individuellement comme dans Perchik réponse, vous pouvez créer un tableau statique et
memcpy
qu' (qui sera probablement plus rapide pour les non-trivial tableau des tailles):Vrai, mais vous auriez le même problème avec une autre solution. Vous pouvez facilement jeter un assert(sizeof(wa) == sizeof(default_wa)) ici pour se protéger contre dans ce cas.
Vous pouvez assurez-vous que le tableau des tailles toujours correspondre si vous définissez comme ceci:
int default_wa[][2] = {{ 5, 2 }, { 7, 9 }}; int wa[count(default_wa)][count(default_wa[0])];
avec#define count(ARRAY) ((sizeof (ARRAY))/(sizeof (ARRAY[0])))
Bon point Christoph, je l'ai fait avant. Je déteste #définition de la fonction count() à chaque fois que j'en ai besoin - doit avoir été une fonctionnalité intégrée.
Rappelons également que vous pouvez utiliser statique dans le constructeur, plutôt que de mettre les valeurs par défaut dans un espace de noms à l'extérieur. Mais seulement si vous n'avez pas besoin d'un constructeur inline. Il améliore la lisibilité.
OriginalL'auteur Adam Rosenfield