[C++] question assez poussée

question assez poussée [C++] - C++ - Programmation

Marsh Posté le 20-05-2002 à 10:27:21    

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]

Reply

Marsh Posté le 20-05-2002 à 10:27:21   

Reply

Marsh Posté le 20-05-2002 à 11:33:23    

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.

Reply

Marsh Posté le 20-05-2002 à 11:47:13    

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.
Reply

Marsh Posté le 20-05-2002 à 11:47:17    

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:

Reply

Marsh Posté le 20-05-2002 à 11:48:40    

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

Reply

Marsh Posté le 20-05-2002 à 11:49:53    

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 ?

Reply

Marsh Posté le 20-05-2002 à 11:51:56    

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:

Reply

Marsh Posté le 20-05-2002 à 13:14:21    

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]

Reply

Marsh Posté le 20-05-2002 à 15:37:33    

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

Reply

Marsh Posté le 20-05-2002 à 15:42:13    

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!!
Reply

Marsh Posté le 20-05-2002 à 15:42:13   

Reply

Marsh Posté le 20-05-2002 à 15:48:13    

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.

Reply

Marsh Posté le 20-05-2002 à 16:06:58    

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

Reply

Marsh Posté le 20-05-2002 à 16:20:44    

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 ...

Reply

Marsh Posté le 20-05-2002 à 16:59:13    

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é !)

Reply

Marsh Posté le 20-05-2002 à 17:03:29    

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 ;)

Reply

Marsh Posté le 20-05-2002 à 17:09:17    

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!!
Reply

Marsh Posté le 20-05-2002 à 17:43:24    

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++

Reply

Marsh Posté le 20-05-2002 à 17:56:31    

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
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed