2010-08-24 4 views
1

j'obtiens l'erreur suivante:erreur C2440: 'type cast': ne peut pas convertir 'std :: _ Vector_iterator <_Ty,_Alloc>' à 'DWORD'

error C2440: 'type cast' : cannot convert from 'std::_Vector_iterator<_Ty,_Alloc>' to 'DWORD' 
     with 
     [ 
      _Ty=LPCSTR , 
      _Alloc=std::allocator<LPCSTR > 
     ] 
     No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called 

Im en utilisant Visual Studio 2005. Cela a fonctionné sur Visual Studio plus mais pas sur celui-ci. Heres le code causant des erreurs:

std::vector<LPCSTR> factions; 

... 

*(DWORD*)(offset+0x571) = (DWORD)factions.begin(); <- error here 

Comment puis-je résoudre ce problème?

+0

'std :: vector :: begin()' ne retourne pas 'DWORD'. Pourriez-vous expliquer ce que vous essayez d'atteindre à la fin? –

+1

Ce code semble ZOMG effrayant et mauvais. –

Répondre

1

Votre objectif est-il de vous débarrasser de l'erreur ou de corriger le programme? Dans ce dernier cas, vous devrez nous dire ce que vous essayez réellement de faire.

Puisque vous n'avez pas je dois deviner. Je suppose que vous voulez convertir une adresse du premier LPCSTR dans le vecteur à DWORD. Si votre code fonctionnait dans la version précédente de VS, c'est le scénario le plus probable. Si je tente juste ceci:

*(DWORD*)(offset+0x571) = (DWORD)(&factions.front()); 

ou ceci:

*(DWORD*)(offset+0x571) = (DWORD)(&*factions.begin()); 

ou ceci:

*(DWORD*)(offset+0x571) = (DWORD)(&factions[0]); 

Si vous souhaitez convertir le LPCSTR stocké à l'avant de votre vecteur DWORD faire ceci:

*(DWORD*)(offset+0x571) = (DWORD)factions.front(); 

ou ceci:

*(DWORD*)(offset+0x571) = (DWORD)(*factions.begin()); 

ou ceci:

*(DWORD*)(offset+0x571) = (DWORD)(factions[0]); 
0

Mon intention était de se débarrasser de l'erreur.

Cela a parfaitement fonctionné: *(DWORD*)(offset+0x571) = (DWORD)factions.front();

+0

S'il vous plaît lire ma réponse après la dernière édition. 'factions.begin()' aurait pu être un simple pointeur dans une ancienne version de VS. Cela expliquerait pourquoi cela a fonctionné. Si j'ai raison, la forme équivalente serait '(DWORD) (& factions.front())'. C'est très différent de '(DWORD) factions.front()' –

+2

Si votre intention est de vous débarrasser de l'erreur de compilation, vous pouvez simplement supprimer la ligne. Si vous voulez que votre code fonctionne correctement, vous devez d'abord comprendre ce qu'il est censé faire. – interjay

+1

"Mon intention était de me débarrasser de l'erreur" Et voici la pièce A démontrant pourquoi le logiciel est nul. –

Questions connexes