D'abord, je suis assez nouveau à C++ et à C donc soyez facile sur moi :-) Deuxièmement, je connais cette question J'ai été demandé plusieurs fois sous de nombreuses formes avant, mais je pourrais comprendre comment plier les réponses à mon cas ...essayant de compiler la bibliothèque d'agitation: erreur: conversion non valide de 'const char *' en 'char *'
Je suis en train de compiler un fichier appelé utilities.cxx de la bibliothèque STIL qui a une sorte de et une licence « open source » (pas vraiment LGPL et donc je ne sais pas si je peux mettre des pièces ici importantes de celui-ci ...
le code a la fonction suivante dans le:
char *replace_extension(char *file_in_directory_name,
const char * const extension)
{
char * location_of_dot =
strchr(find_filename(file_in_directory_name),'.');
// first truncate at extension
if (location_of_dot!= NULL)
*(location_of_dot) = '\0';
strcat (file_in_directory_name,extension);
return file_in_directory_name;
}
donne l'Compiler erreur:
g++ -O3 -ffast-math -DNDEBUG -Wall -Wno-deprecated -I../lmf_v2.0
/includes -D_FILE_OFFSET_BITS=64 -I./include -DSTIR_SIMPLE_BITMAPS -DSC_XWINDOWS
-o opt/buildblock/utilities.o -MMD -MP -c buildblock/utilities.cxx
buildblock/utilities.cxx: In function ‘char* stir::replace_extension(char*, const
char*)’:
buildblock/utilities.cxx:225: error: invalid conversion from ‘const char*’ to ‘char*’
make: *** [opt/buildblock/utilities.o] Error 1
Toute aide serait appréciée ... Merci,
Oz
Ok, première partie déjà répondu ... voici la fonction qui provoque la deuxième erreur:
const char * const
find_filename(const char * const filename_with_directory)
{
const char * name;
#if defined(__OS_VAX__)
name = strrchr(filename_with_directory,']');
if (name==NULL)
name = strrchr(filename_with_directory,':');
#elif defined(__OS_WIN__)
name = strrchr(filename_with_directory,'\\');
if (name==NULL)
name = strrchr(filename_with_directory,'/');
if (name==NULL)
name = strrchr(filename_with_directory,':');
#elif defined(__OS_MAC__)
name = strrchr(filename_with_directory,':');
#else // defined(__OS_UNIX__)
name = strrchr(filename_with_directory,'/');
#endif
if (name!=NULL)
// KT 10/01/2000 name++ changed to name+1
return name+1;
else
return filename_with_directory;
}
Non. selon la norme. –
@Let_Me_Be: Consultez [cette référence] (http://www.cplusplus.com/reference/clibrary/cstring/strchr/). Il est surchargé pour renvoyer 'const char *' quand le premier argument est 'const char *' au lieu de 'char *' – Cameron
Quel manuel est ... en train de lire? 'man strchr' dit' char * strchr (const char * s, int c); ' –