error C2440: '=' : impossible de convertir de 'const char *' to 'char *'
J'ai passé de nombreuses heures sur ici pour trouver de l'aide sur ce qui est apparemment une erreur commune, mais aucun que j'ai vu semble correspondre à mon cas.
Je suis à la migration d'un ancien hors de source, programme qui a été écrit dans Visual Studio 6 C++ pour Visual Studio 2012 et heureusement pour moi que je ne suis pas un programmeur C++ (juste un humble VB et C# développeur). L'assistant migration et l'internet ont été d'une grande aide afin de m'aider à trouver et de corriger le code que l'assistant ne peut pas gérer.
Dans ce bloc de code qui, je crois, est de ne rien faire de plus que de créer un répertoire
int CreateAllDirectories(const char* pszDir)
{
char* pszLastSlash;
char cTmp;
if( _access( pszDir, 0 ) != -1 ) {
//it already exists
return 0;
}
pszLastSlash = strrchr( pszDir, '\\' );
if ( pszLastSlash ) {
cTmp = *pszLastSlash;
*pszLastSlash = 'int CreateAllDirectories(const char* pszDir)
{
char* pszLastSlash;
char cTmp;
if( _access( pszDir, 0 ) != -1 ) {
//it already exists
return 0;
}
pszLastSlash = strrchr( pszDir, '\\' );
if ( pszLastSlash ) {
cTmp = *pszLastSlash;
*pszLastSlash = '\0';
//try again with one less dir
CreateAllDirectories( pszDir );
*pszLastSlash = cTmp;
}
if ( _mkdir( pszDir ) == -1 ) {
return -1;
}
return 0;
';
//try again with one less dir
CreateAllDirectories( pszDir );
*pszLastSlash = cTmp;
}
if ( _mkdir( pszDir ) == -1 ) {
return -1;
}
return 0;
}
génère une erreur lorsque les résultats de strrchr( pszDir, '\' ) sont affectées à la variable pszLastSlash. Le reste de ce code, il ressemble à pszLastSlash = strrchr( pszDir, '\' ); est une expression valide.
Est le problème avec la double barre oblique inverse qui me ressemble et séquence d'échappement.
Vous devez vous connecter pour publier un commentaire.
Peut-être dans cette ligne...
pszLastSlash
est pas constante, maispszDir
est constante. Il y a deux defs pourstrrchr()
(voir http://www.cplusplus.com/reference/cstring/strchr/)...Parce que vous saisissez une constante char *, il va essayer d'utiliser le def qui renvoie un const char*, mais vous êtes en l'assignant à un non-const char*. Je pense que c'est ce qui est de la génération de votre erreur.
Parce que
pszDir
est const, le pointeur retourné vous est const parce que vous ne devriez pas être la modification de la zone de la mémoire pointée parpszDir
.Si vous avez affecté
pszDir
vous-même, vous savez que c'est sûr à modifier, vous pouvez vous détendre votre const contrainte dans la fonction def? I. e.,Mais, seulement c'est
pszDir
est une chaîne de caractères qui vous est propre et vous pouvez modifier 🙂Je viens de remarquer dans le C++ page de référence...
Donc, si vous avez déjà utilisé le C, puis qui pourrait expliquer pourquoi vous voyez l'erreur maintenant.
const char* pszDir
àchar* pszDir
, parce qu'elle peut être modifiée à l'intérieur de la fonction. Ou en faire une copie.pszDir
paramètre sur laCreateAllDirectories()
d'obtenir de l'aide?Depuis cette ligne
est la modification de la mémoire tampon est passé dans votre fonction, vous ne devez pas promettre à votre interlocuteur que vous n'aurez pas de modification de la mémoire tampon. Donc
est la signature correcte
Vous pouvez essayer de mettre de nouveau dans le milieu de
Il sera