Problème avec les <Vector> entre Visual Studio 6 et 8. - C++ - Programmation
Marsh Posté le 28-12-2005 à 09:38:34
T* et std::vector<T>::iterator peuvent/sont des types distincts. Certaines implémentations utilise T* comme type iterator mais il ne faut absolument pas en présumer. Pour ton problème, utilise v.begin() + i au lieu de &v[i]
Marsh Posté le 28-12-2005 à 10:20:04
Taz a écrit : T* et std::vector<T>::iterator peuvent/sont des types distincts. Certaines implémentations utilise T* comme type iterator mais il ne faut absolument pas en présumer. Pour ton problème, utilise v.begin() + i au lieu de &v[i] |
Merci beaucoup.
Mais comment puis-je peu faire pour récupérer ladresse dun objet ?
Par exemple (marche sous VS6) :
Code :
|
Ou la fonction fputbuffer prend un unsigned char* en param 2.
cinematic.cpp(240) : error C2440: 'type cast' : cannot convert from 'std::_Vector_iterator<_Ty,_Alloc>' to 'unsigned char *'
with
[
_Ty=_CinematicEvent,
_Alloc=std::allocator<_CinematicEvent>
]
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
Merci davance.
Marsh Posté le 28-12-2005 à 10:46:06
je t'ai dit quoi bordel ! un iterator c'est pas un T*. Si tu veux récupérer l'adresse d'un truc sur lequel t'as un iterator, ben tu fais un &*it
Marsh Posté le 28-12-2005 à 10:47:00
fputbuffer(fichier, &*it, sizeof *it);
et si tu le peux, préfères ++it à it++. Pourquoi ? Cherche sur le forum, y a un topic la dessus
Marsh Posté le 28-12-2005 à 12:03:36
Merci beaucoup de me reponde mais t'énerve pas pour ça :
Perso je trouve con de mètre &*it à la place de it ... mais si c'est la mode...
(note : pour moi un irerator à toujours été un T* )
Merci quand même.
Marsh Posté le 28-12-2005 à 12:16:23
Lereveur a écrit : Merci beaucoup de me reponde mais t'énerve pas pour ça : |
C'est pas la mode c'est le standard
et si pour toi iterator = T*, ebn tu te fourvoie severement
Marsh Posté le 28-12-2005 à 13:10:14
(Perso j'ai appris les it tous seul sur le tas donc ...)
Mais si tu connais de bons documents qui pourraient méclairer cest avec plaisir que je les lirais.
Marsh Posté le 28-12-2005 à 13:32:51
y a rien à dire, ton it c'est std::vector<T>::iterator et pas un T*. Après c'est RTFM pour savoir ce que fait *it
Marsh Posté le 28-12-2005 à 13:47:42
Taz a écrit : y a rien à dire, ton it c'est std::vector<T>::iterator et pas un T*. Après c'est RTFM pour savoir ce que fait *it |
T'es bizarre comme mec quand même ... ya quelque chose à dire ... puis plus rien.
Bon ce nest pas grave
Comme tu as laire de t'y connaître « un peu », jai une autre question :
Maintenant il ne me reste plus quune erreur pour passer au VS8 (bientôt le paradis).
Lors du Linkage (je sais pas si ce mot existe) jai cette erreur :
LINK : fatal error LNK1104: cannot open file 'libc.lib'
Le fichier nexiste pas dans le repertoire Lib de VS8.
Es-normale ? ou bien ya-t-il eu un bug à linstallation.
Jai essayer de copier le fichier 'libc.lib' du VS6 mais la sa devient la foire aux erreur de redefinition avec LIBCMTD.lib.
Jai lue :
Note: Any executable which accesses a DLL linked with MSVCRT.LIB must
also link with MSVCRT.LIB instead of LIBC.LIB or LIBCMT.LIB.
When using DLLs, it is recommended that all of the modules be
linked with MSVCRT.LIB.
Comment on fait pour quil ne lie pas avec le fichier LIBC.LIB ? (si cest bien la la solution).
Merci davance.
Marsh Posté le 28-12-2005 à 18:24:25
Bon voila merci quand même j'ai trouvé.
Pour ce qui aurai le même problème il siffit de rajouter la ligne
/nod:libc.lib
dans
Properties/Linker/Input/Additional Dependancies
Voila
Vive la vie.
Marsh Posté le 28-12-2005 à 02:03:01
Bonjour.
Voila mon problème :
Jutilise un code suivant depuis très longtemps sur Visual studio 6 :
Et il ne ma jamais posé de problème.
Mais voilà. Aujourdhui je suis passé à Visual Studio 8 (2005) et il me donne sur cette ligne une erreur avec pour commentaire :
mapeditor\main.cpp(510) : error C2664: 'std::_Vector_iterator<_Ty,_Alloc> std::vector<_Ty>::insert(std::_Vector_iterator<_Ty,_Alloc>,const _Ty & )' : cannot convert parameter 1 from '_CinematicEvent *' to 'std::_Vector_iterator<_Ty,_Alloc>'
with
[
_Ty=_CinematicEvent,
_Alloc=std::allocator<_CinematicEvent>
]
No constructor could take the source type, or constructor overload resolution was ambiguous
Je ne vois vraiment pas ou est le problème ni comment le résoudre donc si quelquun ici à la solution ce serai cool quil (quelle) maide.
Jai la même erreur sous une autre forme ici :
(pour la ligne avec error)
error C2440: 'return' : cannot convert from 'std::_Vector_iterator<_Ty,_Alloc>' to '_Character *'
with
[
_Ty=_Character,
_Alloc=std::allocator<_Character>
]
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
Voila.
Merci davance.