Portage de code de VC6 vers g++ - C++ - Programmation
Marsh Posté le 20-12-2004 à 22:33:24
Ca risque d'être un peu plus compliqué que prevu
Considerez-vous que ce qui suit est du C++ ?
Code :
|
Marsh Posté le 20-12-2004 à 22:42:10
oui. sauf le void main
Marsh Posté le 20-12-2004 à 23:31:12
ok,
mais je comprends pas vraiment ce que ce message d'erreur m'apporte.
Disons que je peux sans doute en conclure que c'est une erreur sémantique sinon j'aurai un "parse error befor ..." mais bon c'est pas génial comme moyen de déduction....
En gros je vois pas le problème.
Marsh Posté le 20-12-2004 à 23:46:59
et ben tu comprends qu'on ne peut pas faire un typedef template !
Marsh Posté le 21-12-2004 à 00:21:58
Ok, je ne m'attendais pas à ce que ce soit si radical!
Merci, je m'en serais pas douté.
J'avais du mal à imaginer que ça pose un problème par ce que je considérais pas le typedef comme particulièrement évolué mais bon, je suppose qu'ils doivent avoir leurs raisons.
Ca va pas faciliter la résolution du "Internal compiler error." que j'ai sur cette ligne ci :
Code :
|
Mais j'ai encore de quoi méditer un peu sur cette erreur ci....
(http://gcc.gnu.org/bugs.html)
Marsh Posté le 21-12-2004 à 00:26:43
le typedef, c'est pas gcc, c'est le standard qui le dit.
tu travailles avec quelle version ?
Marsh Posté le 21-12-2004 à 02:01:20
j'ai installé DevC++ 4.9.7.0 avec gcc version 2.95.3-6 et g++-3.2.
Marsh Posté le 21-12-2004 à 02:09:19
2.95 tu peux oublié. 3.2, c'est limite : assure toi au moins d'avoir la dernière version de la branche 3.2.
3.3.5 ou 3.4.3 sont chaudement recommandés
Marsh Posté le 21-12-2004 à 02:28:58
je vais commencer par me procurer une des dernières versions pour demain.
Merci pour tes conseilles Taz!
Marsh Posté le 21-12-2004 à 07:04:49
le scope des boucles for
Marsh Posté le 21-12-2004 à 07:11:51
ouais. D'ailleurs, j'espère que tu utilises un flags un peu plus aggressif que -Wall
Marsh Posté le 21-12-2004 à 11:26:05
kadreg a écrit : le scope des boucles for |
ouais mais ça j'avais prévu le coup.
style j'utilise des noms de variables différents pour chaque initialiseur d'instruction for de même "profondeur" (i, j, k, l, m, n, o, p...). Je sais pas pourquoi mais j'ai toujours trouvé moche de déclarer l'initialiseur avant d'entrer dans le scope.
Pour les options de compilations; ceci est il suffisamment agressif ?
-ansi -pedantic -Wall -W
Marsh Posté le 21-12-2004 à 11:29:03
nan, c'est nul ça
g++ -W -Wall -std=c++98 -pedantic
+
-Weffc++
-Wold-style-cast
-Wshadow
-Winline
Marsh Posté le 21-12-2004 à 11:38:33
ok, genial là j'ai de quoi m'occuper un peu!
Je reviens se soir et corrigerai ça (+/- 200 warning).
Marsh Posté le 22-12-2004 à 03:43:30
Bon, ça prendra plus qu'un soir...
J'ai installé cywin et g++ 3.3.3.
J'ai 561warnings; bon evidement c'est pas 561 différents (170 warning: use of old-style cast, 92 `variable_name' should be initialized in the member initialization list, ...) c'est claire que ceux là vont allés vite mais bon c'est un peu exagéré quand même...
Fin comme quoi, j'aurai mieux fait de pas prendre de mauvaises habitudes.
Marsh Posté le 12-01-2005 à 03:33:39
Une commotion cérébrale, une fracture du sinus, 2reveillons, une session dexamen et 560warnings plus tard
. Me revoilà.
Merci pour vos conseils ; je me suis juste « momentanément » passé des service de Weffc++ par ce que vraiment certains warnings, je vois pas ce qui leur pose problème (dont certain dans la STL).
Par exemple :
/usr/include/c++/3.3.3/bits/stl_vector.h:78: warning: `class |
ou
/usr/include/c++/3.3.3/bits/stl_iterator.h:580: warning: `class |
je nai pas non plus compris ce que ceci pouvais avoir de problèmatique :
|
Sans -Weffc++, il m'en reste 1.
Ce qui pose problème cest le passage de GLUT_BITMAP_8_BY_13 (void *)
API/window.hpp:349: warning: use of old-style cast |
mais je ne vois pas comment arranger ça?
Appart ça le reste est passé sans problème.
Ca fait plaisir.
Marsh Posté le 12-01-2005 à 07:49:00
Les warnings ont l'air d'être tirés des "common misuses" pointés par Scott Meyers dans "Effective C++" et "More Effective C++".
Ce sont de bons livres, tu peux l'acheter (si tu as le budget, bien sûr).
http://www.amazon.com/exec/obidos/ [...] 9?v=glance
Sinon, il me semble qu'on trouve des PDFs ici ou là...
Quand au problème sur les Bitmap8_13, ça a l'air d'être lié à ça. Je te laisse lire, j'ai la flemme:
http://www.open-std.org/jtc1/sc22/ [...] e.html#195
Marsh Posté le 12-01-2005 à 11:53:18
Pour le "Effective C++", je sais bien, c'est pour ça que je m'en suis passé. Ce que je ne comprennais pas c'est ce que cela pouvait avoir de dangereux et pourquoi cela méritait donc un warning?
Mais effectivement si j'achete le livre je serai fixé et suppose qu'ils ont leurs raisons....
Lam's a écrit : |
ok, merci pour le lien.
Marsh Posté le 12-01-2005 à 12:09:36
Bah le premier warning dit que bien que la classe (vector) contienne des pointeurs, elle n'a pas de copy-constructor, ce qui peut être dangereux (c'est vraiment un warning à la con, si tu veux mon avis, mais il est bien pour les débutants en C++).
C'est tiré de l'item 11 (chapitre 4 du livre)
"Declare a copy constructor and an assignment operator for classes with dynamically allocated memory."
Marsh Posté le 12-01-2005 à 12:24:42
D'autant plus que la copie d'une référence à l'initialisation peut être interaissante dans certains cas.
Fin soit, il me semblais que c'était tous des warnings de ce style donc j'ai abandonné cette option de compilation.
Marsh Posté le 12-01-2005 à 12:34:20
peak a écrit : D'autant plus que la copie d'une référence à l'initialisation peut être interaissante dans certains cas. |
C'est mon avis: laisse tomber cette option, par contre, essaie de lire le bouquin (fait le acheter par ta bibliothèque, etc.), ainsi que le More Effective C++. Ce sont de bons livres.
Par contre, un warning que je ne sais s'il faut que j'adore ou que je deteste, c'est le /W64 de Visual Studio, qui rale sur toute affectation entre un int et un pointeur. Pour l'instant il est désactivé (trop de legacy code non écrit par moi), mais je sens bien que je vais m'amuser lorsqu'il faudra le remettre .
Marsh Posté le 12-01-2005 à 12:51:45
ok, je vais suivre tes conseils et me procurer ce livre.
Pour le /W64 de Visual studio, l'utilisation d'un "reinterpret_cast" n'arrange-t-il pas le problème?
Marsh Posté le 12-01-2005 à 12:59:43
peak a écrit : ok, je vais suivre tes conseils et me procurer ce livre. |
Nan.
Code :
|
Fondamentalement, le code ne fonctionne plus, puisque les pointeurs font 64 bits, et ne peuvent dont être représentés dans des int (qui eux restent à 32 bits sur la plupart des plate-formes). Il faut soit convertir en long, soit accepter de se ballader avec un (void *), soit revoir le code qui se permet de stocker des pointeurs dans des entiers, et ça, ça coute souvent cher.
Marsh Posté le 12-01-2005 à 23:32:02
peak a écrit : Ca risque d'être un peu plus compliqué que prevu
|
Taz a écrit : oui. sauf le void main |
je comprends pas ce typedef
tu peux donner un exemple d'utilisation de ce nouveau type stp ?
Marsh Posté le 12-01-2005 à 23:35:40
recherche bordel
http://forum.hardware.fr/forum2.ph [...] 0&subcat=0
Marsh Posté le 12-01-2005 à 23:48:20
ouais super c'est vachement evident qu'il faut rechercher a pointeur de fonction membre d'une classe
Marsh Posté le 12-01-2005 à 23:58:10
ben tu cherches pointeurs, tu as déjà des réponses, tu tapes pointeur fonction, c'est le deuxième résultat ... faut pas pousser.
Marsh Posté le 20-12-2004 à 20:48:47
Salut ,
j'ai décidé de porter un de mes codes C++ (13.000lignes) qui compile sous VC6.0 vers g++ et me suis dis qu'un petit topique centralisant les problèmes pour lesquels je ne trouve pas de solutions me serais bien utile.
A la base j'utilisait g++ sous windows avec cygwin car j'avais des problèmes avec les librairies openGL (et glut) sous linux et de plus je n'ai jamais vraiment trouver de digne successeur d'un point de vu IDE à Visual Studio combiné à Visual Assist 6.0 sous linux (sans doute par habitude mais je n'ai pas testé eclipse; ce que je ferai dès que le portage sera terminé). J'ai vite pris la mauvaise habitude de compiler sous visual et me suis donc habitué à la dé-standardisation syntaxique propre à celui-ci.
Je ne connais pas bien les messages d'erreur de g++ et trouve certains particulièrement peu explicite....
Le gros est déjà plus ou moins passé mais là par exemple je ne comprend pas pourquoi ceci pose un problème :
ERREUR :
template declaration of `typedef void (test<Type>::* functor)(int)'
Je trouve ce message d'erreur assez marrant d'ailleurs.