Initialiser le tableau statique en C++
J'ai ces classes:
class FS{
static char mount(Partition* p)
{return myImpl->mount(p);}
/*...*/
KernelFS* myImpl;
};
class KernelFS{
char mount(Partition* p){
/*...*/
while(available[i]) i++;
}
/*...*/
static bool available[26];
};
Programme principal utilise uniquement des fonctions statiques de FS, e.g:
void main(){
Partition* p=/*...*/;
FS::mount(p);
/*...*/
}
Lors de la FS::mont(p) est appelée, elle appelle myImpl->mont(p) (qui est une fonction de KernelFS classe). Et voici le problème. Quand il s'agit de
while(available[i]) i++;
...ça casse! Je pense que le problème est que je n'ai pas initialisé de la matrice[26], et je n'ai aucune idée de comment faire cela... Quoi d'autre peut être le problème? S'il vous plaît aider.
Btw, main() ne crée jamais de FS ou KernelFS objets, donc je pense qu'il n'est pas de constructeurs...
KernelFS* myImpl;
est déclarée statique, correct?Peut-être initiation sont-ils liés?
cela a déjà été abordé dans une autre question
OriginalL'auteur vtomic85 | 2012-01-25
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin de la définir dans (exactement)l'un de vos fichiers cpp:
Que faire si les valeurs initiales ne sont pas les mêmes? Puis-je utiliser une boucle?
Eh bien, il sera vraiment intuitif, mais si vous voulez vraiment obtenir ce travail, voici un application.
Enregistrer, merci.
J'ai compris ce que votre exigence est quand vous avez posté votre premier commentaire. Ce que j'ai dit dans mon commentaire précédent est l'exemple de code que j'ai montré peut être facilement modifié pour en faire un tableau statique de la classe membre. Ici je l'ai fait pour vous.
OriginalL'auteur Alok Save
Le problème est que le tableau n'est jamais alloué de la mémoire. Vous devez ajouter ce dans l'étendue globale:
Assurez-vous de le faire dans un fichier cpp. Ajout dans plus d'un fichier cpp entraînera dupliquer le symbole d'erreur lors de la liaison. Aussi, vous ne devriez pas faire cela dans un fichier d'en-tête. La meilleure approche consiste à ajouter ceci dans le fichier cpp avec la mise en œuvre de la
KernelFS
classe.Noter également que l'initialisation statique de l'ordre à travers les unités de compilation n'est pas garanti. Par conséquent, vous ne devez pas appeler
KernelFS::mount()
d'initialisation statique de code dans un autre fichier.OriginalL'auteur Adam Zalcman