template, qq chose m'échappe - C++ - Programmation
Marsh Posté le 26-10-2004 à 00:46:42
Ca compile nickel mais ça passe pas à l'édition de liens c'est ça ?
Apres j'ai pas pigé l'histoire du global. T'as déclarés 2 variables locales (sur la pile) dans fonction_quelconque. Tu t'attends à quoi ? Et même en static, leur portée est celle du bloc de la fonction. Sinon t'imagines le truc, déclarer des pointeurs sur des variable statiques de fonctions, le effets de bord fouarreux...
Code :
|
et y'a plus de variable globale
Marsh Posté le 26-10-2004 à 02:22:46
extern ça veut dire "ce machin là existe, mais te préoccupe de l'allocation / init, quelqu'un d'autre le fait déjà ailleurs"
si y a pas d'ailleurs ...
Marsh Posté le 26-10-2004 à 08:13:57
HelloWorld a écrit : Ca compile nickel mais ça passe pas à l'édition de liens c'est ça ? |
Oui, c'est ça.
Citation : |
En fait, les variables ne sont pas censées être locales, vu qu'elles sont déclarées extern dans global.h, qui est inclus en tête de plusieurs unités de compilation (enfin c'est ce que je pensais).
Code :
|
et y'a plus de variable globale
[/citation]
Il me semble que c'est ce que j'avais commencé par faire, mais je vais réessayer.
Marsh Posté le 26-10-2004 à 08:22:50
Taz a écrit : extern ça veut dire "ce machin là existe, mais te préoccupe de l'allocation / init, quelqu'un d'autre le fait déjà ailleurs" |
Ben dans les deux cas, il y a allocation, le premier cas à l'intérieur de la fonction. En mettant les arguments d'un constructeur
maClasse_dint hop(3);
maClasse_detruc hophop(chose);
en dehors de la fonction (portée globale), - donc a priori il y a instanciation/allocation de la classe -, et d'ailleurs, ça marche.
Par contre, si je fais ça à l'intérieur de la fonction, il semble que les types paramétrés définis en extern ne soit pas connus.
Pourquoi, c'est ce que je ne pige pas.
Marsh Posté le 26-10-2004 à 09:14:43
el muchacho a écrit : Ben dans les deux cas, il y a allocation |
Il y a allocation, mais la définition n'est pas la bonne puisque tu déclares en fait une variable homonyme dans le scope de ta fonction.
On reprend les basiques : dans ton .h, tu as fait la déclaration d'un extern. Tu as donc dit au compilo pour ces variables là : un jour, un grand brun ténébreux viendra et te dira où elles sont. Le compilo attend donc une définition de ces variables (ie. où sont elles en mémoire). Plus précisemment, il attend une définition dans le tas, au niveau du bon namespace.
Or, ce que tu lui donnes, c'est une nouvelle déclaration (ainsi que sa définition) dans une fonction, dans la pile. Le compilo ne s'en sert donc pas pour résoudre les variables globales.
Dans l'ancien temps, on disait que ces variables étaient automatiques:
http://msdn.microsoft.com/library/ [...] ions_4.asp
Marsh Posté le 26-10-2004 à 10:04:11
Qui eût cru qu'un jour on donnerait la msdn en référence sur le C++. Ca laisse libre à tous les fantasmes sur le futur des technologies MS...
Marsh Posté le 26-10-2004 à 11:43:31
el muchacho a écrit : Ben dans les deux cas, il y a allocation, le premier cas à l'intérieur de la fonction. |
t'es sous médicament ?
Marsh Posté le 27-10-2004 à 00:18:10
Lam's a écrit : Il y a allocation, mais la définition n'est pas la bonne puisque tu déclares en fait une variable homonyme dans le scope de ta fonction. |
Oh putain... on va mettre ça sur le compte de la fatigue, hein...
Marsh Posté le 27-10-2004 à 01:44:04
Je dirais qu'il tente de la déclarer.
=> un alias vers une variable dont la portée est restreinte à celle d'une fonction. C'est mieux ?
Quoique sur alias j'ai un doute. C'est bien la variable elle même qu'il déclare (sans définir), et non un alias ou un homonyme ?
En gros d'un côté tu déclares une variable globale, de l'autre locale à une fonction. Cherche l'erreur...
Marsh Posté le 27-10-2004 à 02:14:49
tu peux virer tous tes trucs de C++, c'est un pb de C là.
Marsh Posté le 26-10-2004 à 00:26:46
Alors ouala, j'ai codé une petite class template tranquillou dans mon coin :
template<typename T> class maClasse {
maClasse(T) {}
~maClasse;
...
};
Pis j'ai déclaré dans un global.h quelques variables globales (oui je sais, ça rime avec "çay mal" ):
Puis dans un .cpp, j'ai voulu faire un truc du genre :
Et là, le linker, il est pas content.
Il me dit qu'il ne connait pas les types maClasse_dint et maClasse_detruc.
Par contre, si je fais :
là, ça roule, le linker il est content.
Ma question : Pourquoi donc ?
(j'espère n'avoir rien oublié)
Message édité par el muchacho le 26-10-2004 à 00:31:13