Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
941 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C++] question assez poussée

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] question assez poussée

n°141169
freewol
Ceci n'est pas une citation
Posté le 20-05-2002 à 10:27:21  profilanswer
 

Voila j'utilise depuis un bout de tps des templates et des namespaces, mais je n'avais jamais eu l'occasion de les mélanger ... grand bien m'en a pris.
Parce que ce matin, quand j'ai décidé de mettre une fonction template dans un namespace, pas moyen de compiler ... (je suis sous VC++ 6)
Je me prends cette erreur : error C2893: Failed to specialize function template 'void __cdecl NListLib::CreateBasicList(class NListLib::BasicList<T> ** )'
        With the following template arguments:
        'float'
 
J'ai au préalable déclaré ma fonction comme ça :
namespace NListLib
    {
    template <typename T> class BasicList;
    template <typename T> void CreateBasicList (BasicList<T> **);
    }
 
SVP aidez moi, je ne sais vraiment pas où chercher ... (VC++ ne connait même pas cette erreur ...

 

[jfdsdjhfuetppo]--Message édité par freewol le 20-05-2002 à 10:28:59--[/jfdsdjhfuetppo]

mood
Publicité
Posté le 20-05-2002 à 10:27:21  profilanswer
 

n°141183
verdoux
And I'm still waiting
Posté le 20-05-2002 à 11:33:23  profilanswer
 

Affiche tout ton code.
Mais il est probable que c'est un pb avec VC++.
Il a parfois du mal avec les templates et les namespaces.

n°141185
deathsharp
Posté le 20-05-2002 à 11:47:13  profilanswer
 

ca c'est possible
vc++ 6 au niveau des namespaces est pas genial
.net est nettement mieux


---------------
What butter and whiskey won't cure, there is no cure for.
n°141186
freewol
Ceci n'est pas une citation
Posté le 20-05-2002 à 11:47:17  profilanswer
 

euh ben en fait ça servirait pas à grand chose que j'affiche tout mon code, puisque cette petite chose plante aussi :
namespace NEssai
   {
   template <typename T> void essai (T dummy);
   }
 
template <typename T> void NEssai::essai (T dummy)
   {
   
   }
   
Itou un appel à Nessai::essai<int> (5) plante de la même manière ... :sweat:

n°141187
verdoux
And I'm still waiting
Posté le 20-05-2002 à 11:48:40  profilanswer
 

Une solution devrait être de regrouper déclaration et définition dans le corps du namespace.

n°141188
freewol
Ceci n'est pas une citation
Posté le 20-05-2002 à 11:49:53  profilanswer
 

Et pour ce qui est de VC++6, je confirme qu'il a du mal avec les namespaces puisque déjà le truc qui remplie automatiquement l'écriture (euh ... auto-completion ptet ?) marche uniquement avec les classes dans les namespaces, mais il oublie toutes les fonctions ...
Et sinon est-ce qu'il serait possible que parmi ceux du forum il y ait une personne possédant VC++6 qui essaie pour voir si ça fait pareil, et une personne possédant un autre compilateur qui essaie aussi ?

n°141189
freewol
Ceci n'est pas une citation
Posté le 20-05-2002 à 11:51:56  profilanswer
 

Verdoux a écrit a écrit :

Une solution devrait être de regrouper déclaration et définition dans le corps du namespace.  




 
:??:
Et ben tiens ça j'y ai même pas pensé, et le fait est que cela  semble marcher, en tout cas plus d'erreur de compilation ... Bon et bien je sais pas quoi dire, je suis pas suffisemment rusé pour vc++, et merci bcp :jap:

n°141214
tanguy
Posté le 20-05-2002 à 13:14:21  profilanswer
 

Avec visual C++ 6 il faut en tout premier lieu installer le dernier service pack qui est le 5
il fait plus de 100 Mo mais il résoud pas mal de problèmes (et en rajoute combien ?).
 
y'a pas qu'avec les templates et les namespaces qu'il a du mal,
il suffit de faire ca pour rigoler :
 
for (int i ...) ...
...
for (int i ...) ...
 
d'ailleurs si quelqu'un a essayé la version 7 je voudrais savoir s'ils commencent à bien gérer la création/destruction de variable comme dans ce cas
 
 
oui aussi BasicList et tout le reste ca doit surement se remplacer par list de la STL

 

[jfdsdjhfuetppo]--Message édité par tanguy le 20-05-2002 à 13:16:52--[/jfdsdjhfuetppo]

n°141247
freewol
Ceci n'est pas une citation
Posté le 20-05-2002 à 15:37:33  profilanswer
 

tanguy a écrit a écrit :

Avec visual C++ 6 il faut en tout premier lieu installer le dernier service pack qui est le 5
il fait plus de 100 Mo mais il résoud pas mal de problèmes (et en rajoute combien ?).
 
y'a pas qu'avec les templates et les namespaces qu'il a du mal,
il suffit de faire ca pour rigoler :
 
for (int i ...) ...
...
for (int i ...) ...
 
d'ailleurs si quelqu'un a essayé la version 7 je voudrais savoir s'ils commencent à bien gérer la création/destruction de variable comme dans ce cas
 
 
oui aussi BasicList et tout le reste ca doit surement se remplacer par list de la STL  




 
Pour le service pack, où est-ce que je pourrais trouver la listes des choses améliorées, et où le télécharger ? J'avoue que je n'en avais jamais entendu parler auparavant ...
Pour les déclarations dans les for, c'est clair que c'est un peu chiant puisque ça gache un peu (bcp ?) l'interet de déclarer sa variable comme ça ... enfin je croyais que c'était inhérent au c++ et non à vc++. ça fait partie des améliorations du service pack ?
 
Ensuite pour ce qui est de la liste de la stl oui je suis au courant de son existence t'inquiète pas, c'est en toute connaissance de cause que j'en reprogramme une "copie" ;)
Merci de ta réponse

n°141251
Willyzekid
Posté le 20-05-2002 à 15:42:13  profilanswer
 

oui le service pack 5 et viteeeeeeeeeeeee!!!
 
http://msdn.microsoft.com/vstudio/ [...] efault.asp
La liste des corrections est en dessous. Ou tu peux chercher directement dedans en tapant "Namespace Template" mais là devant le nombre de correctifs...:D
 
J'avais déjà eu prb similaire et j'ai cherché une bonne après-midi avant de m'apercevoir que le SP5 n'était pas installé :sweat:

 

[jfdsdjhfuetppo]--Message édité par Willyzekid le 20-05-2002 à 15:42:45--[/jfdsdjhfuetppo]


---------------
Horizon pas Net, reste à la buvette!!
mood
Publicité
Posté le 20-05-2002 à 15:42:13  profilanswer
 

n°141253
freewol
Ceci n'est pas une citation
Posté le 20-05-2002 à 15:48:13  profilanswer
 

Willyzekid a écrit a écrit :

oui le service pack 5 et viteeeeeeeeeeeee!!!
 
http://msdn.microsoft.com/vstudio/ [...] efault.asp
La liste des corrections est en dessous. Ou tu peux chercher directement dedans en tapant "Namespace Template" mais là devant le nombre de correctifs...:D
 
J'avais déjà eu prb similaire et j'ai cherché une bonne après-midi avant de m'apercevoir que le SP5 n'était pas installé :sweat:  




 
Eh bien c'est assez marrant de voir que je suis déjà allé qques fois sur le site de la msdn et qu'on m'a jamais averti de la sortie d'un service pack ... enfin bon peu importe, merci pour l'adresse.

n°141262
tanguy
Posté le 20-05-2002 à 16:06:58  profilanswer
 

freewol a écrit a écrit :

 
Pour les déclarations dans les for, c'est clair que c'est un peu chiant puisque ça gache un peu (bcp ?) l'interet de déclarer sa variable comme ça ... enfin je croyais que c'était inhérent au c++ et non à vc++. ça fait partie des améliorations du service pack ?




 
non ca fait pas partie des améliorations du service pack
et je voudrais bien savoir si la version 7 de VC pose encore problème.
 
c'est pas un problème du langage, qd on fait for(int i ...) on déclare un entier i local à la boucle : i n'existe que à l'intérieur de la boucle et est détruit dès que l'on en sort.
c'est pareil que faire :
 
while () {
     MyClass mc;
     ...
}
 
l'objet mc de la classe MyClass est local à la boucle while et son destructeur sera appelé automatiquement. C'est vraiment la base, c'est pas des templates à la Alexandrescu ! et pourtant...
 
Je compile mes programmes avec g++ suivit des flags -Wall -pedantic -ansi -Wprototypes etc... et j'ai jamais réussi a recompiler avec Visual qui se chie dessus à cause du C++
 
et quand je vois le prix de Visual et les trucs basiques qu'ils devraient gérer, ca me fou en rogne, surtout que beaucoup de personnes l'utilisent.
 
bref IMHO mauvais compilo, changer de compilo

n°141275
freewol
Ceci n'est pas une citation
Posté le 20-05-2002 à 16:20:44  profilanswer
 

Je suis d'accord sur le fait qu'en toute logique, le i déclaré dans le for devrait être local, comme dans ton exemple, mais le fait est qu'il ne l'est absolument pas pour vc++, puisqu'on peut l'utiliser après exactement comme si la ligne int i=0 était déplacée juste avant le for ...
Alors d'accord c'est dommage, mais au moins vc++ reste "logique" avec lui-même ... je crois pas que ça en fasse un mauvais compilateur pour autant ... je veux dire que c'est pas le genre de truc qui fera perdre bcp de tps sur un projet ...

n°141282
tanguy
Posté le 20-05-2002 à 16:59:13  profilanswer
 

freewol a écrit a écrit :

je veux dire que c'est pas le genre de truc qui fera perdre bcp de tps sur un projet ...  




oui tu oublies les espaces de noms et les templates.
je te file le source de mon dernier petit projet et tu le passes sous Visual, moi pendant ce temps je vais me siroter un jus d'orange :) (conseil : de ton coté prend du café !)

n°141283
freewol
Ceci n'est pas une citation
Posté le 20-05-2002 à 17:03:29  profilanswer
 

okok, je n'ai pas dis que dans l'absolu vc++ n'était pas un mauvais compilo, j'ai juste dis que l'exemple du for ne me semblait pas vraiment approprié ...
mais comme je n'ai pas à gérer de gros projets, je ne peux absolument pas dire si vc++ est oui ou non un mauvais compilo, alors je te fais confiance :jap:
Tout ce que je peux dire c'est qu'à mon niveau vc++ m'a heureusement fais gagné plus de tps qu'il ne m'en a fait perdre ;)

n°141285
Willyzekid
Posté le 20-05-2002 à 17:09:17  profilanswer
 

freewol a écrit a écrit :

okok, je n'ai pas dis que dans l'absolu vc++ n'était pas un mauvais compilo, j'ai juste dis que l'exemple du for ne me semblait pas vraiment approprié ...
mais comme je n'ai pas à gérer de gros projets, je ne peux absolument pas dire si vc++ est oui ou non un mauvais compilo, alors je te fais confiance :jap:
Tout ce que je peux dire c'est qu'à mon niveau vc++ m'a heureusement fais gagné plus de tps qu'il ne m'en a fait perdre ;)  




 
Effectivement, c'est pas vraiment génant, c'est "juste" un prb de portabilité...avec un projet écrit sous VC++ à la base et que l'on veut porter sous d'autres plateformes, il faudra faire gaffe à ces for qui déclarent des variables non locales...
sinon c'est emmerdements assurés :D
Mais, de toute facon, comme aucun compilo ne respecte vraiment la norme, on a des surprises à chaque fois :)
 
sinon, il est très bien VC++, il produit un code rapide il me semble...


---------------
Horizon pas Net, reste à la buvette!!
n°141296
tanguy
Posté le 20-05-2002 à 17:43:24  profilanswer
 

Willyzekid a écrit a écrit :

 
avec un projet écrit sous VC++ à la base et que l'on veut porter sous d'autres plateformes, il faudra faire gaffe à ces for qui déclarent des variables non locales...




 
C'est pire dans le sens inverse !
Visual C++ dans sa version 6 sp5 est lamentable au niveau des warnings
donc porter du code de VC vers un autre compilo c'est chiant
par exemple rien que les prototypes des fonctions membres, on oublie le void, on rajoute des valeurs par défaut aux params dans le .cpp etc... sans que le compilo gueule.
Donc on se dit qu'il suffit d'augmenter le niveau de warnings de VC pour qu'il nous informe d'éventuelles oublis
 
pas de bol, si l'on passe le niveau de warning de 3 (par défaut) à 4 (le max), c'est inutilisable car c'est dans les headers de Visual que ca chie et ca affiche des tonnes de warnings !!!
quand j'ai vu ca j'étais sur le cul...
 
 

Willyzekid a écrit a écrit :

 
Mais, de toute facon, comme aucun compilo ne respecte vraiment la norme, on a des surprises à chaque fois :)




 
pas de bol, cf http://groups.google.com/groups?hl [...] 339&rnum=1
 
le compilo EDG supporte la norme ANSI C++ de 1998 et même export !
 
pour GNU GCC (dont fait parti g++), il manque export et quelques autres conneries. Mais surtout sur la page web de gcc ils ont la gentillesse de dire ce qu'il ne va pas, les bugs etc...
avec Microsoft tu peux te casser le cul à chercher pendant des heures
 
pour ICC c'est à peu de chose près pareil d'après ce que j'ai lu.
 
 

Willyzekid a écrit a écrit :

 
sinon, il est très bien VC++, il produit un code rapide il me semble...  




 
on va plutot dire qu'il compile vite...
si tu veux un compilo qui te donne du code rapide tu choppes ICC le compilo d'Intel qui est optimisé pour l'architecture IA-32
 
j'ai pas de benchs contre VC mais contre g++ c'est 10 à 20% plus rapide (ca doit être pareil pour VC).
 
Mais gcc à une très bonne excuse : il supporte très bien la norme et surtout il est etremement portable (donc forcément c'est plus difficile de faire des optimisations pour tel ou tel architecture) ce qui n'est assurément pas le cas de VC.
 
 
Nan vraiment, c'est rigolo au début de voir l'IDE qui fait la complétion, mais le compilo derrière... on a presque l'impression qu'ils le font exprès de faire chier le monde genre comme J++

n°141300
os2
Posté le 20-05-2002 à 17:56:31  profilanswer
 

moi j'aime bien bcb et je le trouve pas mal
mais dans mes cours on utilise vc++


---------------
Borland rulez: http://pages.infinit.net/borland

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C++] question assez poussée

 

Sujets relatifs
[Delphi] Question neuneu : Taille importante des .sexe's?[ASM] Question tres tres simple
ptite question en delphi [facile][html] Question de nOOb
[JAVA/JINI]Comment ca marche ? (desoler question vague ....)euh question bete html...
[VB / VB.NET] Juste une toute petite question toute bête[PHP] question débutant
[PHP] newbie questionjava : question sur "synchronized"
Plus de sujets relatifs à : [C++] question assez poussée


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR