Tableau en static - C++ - Programmation
Marsh Posté le 11-06-2005 à 00:03:14
n'importe quoi.
tu veux faire quoi ? une variable globale ?
Marsh Posté le 11-06-2005 à 00:20:12
Taz a écrit : non ça compile pas. |
bein si ?
Code :
|
Marsh Posté le 11-06-2005 à 00:22:29
ce qui n'est pas du TOUT la même chose !
edit: et c'est d'ailleurs une pratique douteuse vu que tu dispenses dans ton .h une déclaration imcomplète, rendant ton tableau peu pratique à utiliser (sizeof ou les templates ne fonctionnent pas). Voir inutilisable.
edit2: ne te laisse pas abuser parce que ton compilateur ferme sa gueule parce qu'au final il obtient la definition de tab.
Marsh Posté le 11-06-2005 à 00:44:34
Taz a écrit : ne te laisse pas abuser parce que ton compilateur ferme sa gueule parce qu'au final il obtient la definition de tab. |
ça peut ne pas fonctionner ? parceque comme tu l'auras deviné j'ai testé le sizeof et le coup du template et pas de prob
Marsh Posté le 11-06-2005 à 03:41:18
Bon merci à vous d'essayer, mais je suis toujours un peu en galère...
Taz => c'est pas vraiment une variable globale, c'est juste un tableau, privé à la classe, mais qui doit etre statique (donc appartenant à la classe et pas une instance en particulier)
Voilà un extrait de Param.h :
Code :
|
et mon Param.cpp :
Code :
|
Bon ce ne sont que des extraits, mais en gros j'appelle tout d'abord Param::init(); puis j'accede au valeur par access... Mais j'ai une erreur de compilation : dans Param.cpp il me dit que parametre n'est pas déclaré
Je suis plutot newb en C++ donc si vous pensez que c'est possible mais que c'est idiot de procéder comme ça n'hésitez pas à me le dire
Voilà merci à ceux qui pourront faire avancer le Shmilblick...
Marsh Posté le 11-06-2005 à 04:34:18
Je préviens, je suis absolument nul en C++ (Taz, sois gentil avec moi s'il te plait )
Tu devrais déclarer tes fonctions comme ça:
Code :
|
Et la variable static doit être initialisée en dehors de la classe. Il te faudrait donc un
Code :
|
en dehors de la déclaration de la classe.
Mais je pense qu'il y a de fortes chances que tu n'ais pas besoin de faire ça. Explique ce que tu veux faire avec ta classe
Marsh Posté le 11-06-2005 à 10:10:39
push a écrit : ça peut ne pas fonctionner ? parceque comme tu l'auras deviné j'ai testé le sizeof et le coup du template et pas de prob |
je veux bien voir ça
Marsh Posté le 11-06-2005 à 12:55:03
Pillow ca ne marche pas , déjà parce que je veux que mon tableau soit en protected, et si je met
Code :
|
en dehors de la déclaration de la classe, il ne le sera pas, mais meme si je le met en dehors d'une classe, le compilo me dit logiquement que :
Param.h:21: error: `int Param::parametre[50]' is not a static member of `class
Param'
En fait je veux faire comme pour une variable static, que l'on déclare dans le .h, et que l'on utilise dans le .cpp, tout simplement (enfin pas si simple..., arf)
Marsh Posté le 11-06-2005 à 13:02:21
ça veut rien dire ce que tu veux : tu veux une variable globale ou un variable de classe ?
Marsh Posté le 11-06-2005 à 13:22:58
.hpp
class Foo
{
static T v;
};
.cpp
T Foo::v; // et initialisation si nécessaire.
Marsh Posté le 11-06-2005 à 20:11:27
Taz a écrit : je veux bien voir ça |
je sens que je vais dire une connerie
Code :
|
Marsh Posté le 11-06-2005 à 21:09:02
vas-y, maintenant bouge ta définion de tab dans un .cpp séparé comme tu ferais normalement ...
ici ça fonctionne avec ton compilo, parce qu'il se rattrape aux branches en cherchant la définition de Plop::tab dans le reste du fichier, ce qu'il ne devrait pas. Ça doit produire une erreur. D'ailleurs à bien y réfléchir, ici ça marche grace aux template. Lors de l'évaluation de Plop<int> dans main, le compilateur a déjà la définition de Plop<int>::tab. C'est fortuit.
Code :
|
essaie ça.
Marsh Posté le 11-06-2005 à 21:14:56
en fait, ici static à le sens de privé, mais veut bien dire extern 'est défini ailleurs'. static int tab[]; est valide mais incomplet, et donc peu pratique à utiliser. les tableaux globaux, c'est chiant. en C ou C++, la solution utilisée, c'est alors de mettre un marqueur en fin de tableau pour pouvoir retrouver le nombre d'éléments
Marsh Posté le 11-06-2005 à 22:02:07
Code :
|
Code :
|
Marsh Posté le 11-06-2005 à 22:12:23
t'as toujours pas compris ...
ici entre les template et ton .h, c'est EXACTEMENT la même chose que précédement. Mais alors c'est textuellement pareil
fais un plop.h, un plop.cpp et un main.cpp dans le quel tu manipules Plop::tab.
Marsh Posté le 11-06-2005 à 22:18:38
error: `Plop<int>::tab' has incomplete type
error: invalid use of array with unspecified bounds
Marsh Posté le 10-06-2005 à 23:53:42
Bonjour, j'aimerai savoir comment déclarer un tableau en static (dans un .h) puis l'initialiser et s'en servir dans la classe correspondante, En fait un début de réponse est donné dans le 2eme post de cette page : http://forum.hardware.fr/hardwaref [...] -42315.htm
Mais "static int []tab;" provoque une erreur de compilation.
Merci d'avance.
Florian