首先,我对C++和C很陌生,所以对我来说很容易:-)其次,我知道这个问题之前已经多次被问过很多次,但我可以想出如何弯曲我的案例的答案......
我正在尝试从STIL库中编译一个名为utilities.cxx的文件,该库具有某种"开源"许可证(不是真正的LGPL,所以我不知道我是否可以把它放在这里的重要部分...
代码中包含以下函数:
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;
}
Run Code Online (Sandbox Code Playgroud)
编译它会给出错误:
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
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激...谢谢,
奥兹
好的,第一部分已经回答了......这是导致第二个错误的函数:
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;
}
Run Code Online (Sandbox Code Playgroud)
这一行导致错误:
char * location_of_dot =
strchr(find_filename(file_in_directory_name),'.');
Run Code Online (Sandbox Code Playgroud)
strchr()返回a const char*,而不是char*使用a const char*作为第一个参数调用时(我假设find_filename()返回a const char *,否则你不会看到这个错误).
由于您要分配给返回的内存位置strchr,因此您不希望使用此重载版本.改变find_filename()返回一个char*.
更新:您已发布代码find_filename()并更改返回类型将涉及更改其他内容(并且除此之外没有多大意义).相反,将返回值转换find_filename()为a char*或将结果转换strchr()为a char*.
示例(使用const转换):
char * location_of_dot = const_cast<char*>(
strchr(find_filename(file_in_directory_name),'.'));
Run Code Online (Sandbox Code Playgroud)