我不太喜欢编码/编程,但我正在尝试编译Linux Source。
以下错误消息显示:
error: invalid conversion from ‘const char*’ to ‘char*’ [-fpermissive]
char *ptr = strchr( in, ch );
虽然“谷歌搜索”我无法找到一个有用的答案。 我想这是它失败的部分:
//////////////////////////////////////////////////////////////////////////
/// Parses an IP address string
///
/// @param[out] out array containing the IP address in raw 4-byte format
/// @param in string containing an IP address in 'nnn.nnn.nnn.nnn'
/// notation
//////////////////////////////////////////////////////////////////////////
int parseIP( uint8_t *out, const char *in )
{
in_addr addr, haddr;
int c = 0;
int ch = '.';
char *ptr = strchr( in, ch );
while( ptr ) {
++c;
ptr = strchr( ptr + 1, ch );
}
if( c != 3 )
return -EINVAL;
if( inet_aton( in, &addr ) == 0 )
return -EINVAL;
haddr.s_addr = ntohl( addr.s_addr );
for( int i = 0; i < 4; ++i )
out[ i ] = ((uint8_t *)&haddr.s_addr)[ 3 - i ];
return 0;
}
希望任何人都可以提供帮助。
此致 标记
大卫,
我发现这部分被调用并试图改变它,但在使用'make'命令时仍然是相同的错误消息。
case 'i':
if( getuid() != 0 ) {
std::cerr << "Error: you need to have "
"root privileges in "
"order to use the "
"-i/--ipaddr option"
<< std::endl;
exit( 1 );
}
if( strncmp( optarg, "dhcp", 4 ) == 0 &&
strlen( optarg ) == 4 )
opt_devip_dhcp = 1;
else if( parseIP( opt_devip, (char *)optarg ) ) {
std::cerr << "Error: bad IP address" <<
std::endl;
exit( 3 );
}
opt_devip_set = 1;
break;
case 'm':
if( parseIP( opt_devmask, (char *)optarg ) ) {
std::cerr << "Error: bad network mask" <<
std::endl;
exit( 7 );
}
opt_devmask_set = 1;
break;
答案 0 :(得分:0)
int parseIP( uint8_t *out, const char *in )
您需要找到主程序中调用parseIP
的位置。见上文第二个参数是const char *in
。您正确地进行了正确的求和,这可能是生成错误的地方。如果您在主程序中检入调用parseIP
的位置,您可能会发现您的程序将char *
参数传递给const char *
而不是parseIP
。您可以通过将传递给somevar = parseIP( outvar, stringin )
的值转换为(char *)来在代码中更正此示例:如果您发现:
(char *)
将第二个参数转换为somevar = parseIP( outvar, (char *)stringin )
:
cheat
或者您可以只使用编译器[-fpermissive]
。它会告诉你如何做到这一点。请注意-fpermissive
作为警告的一部分。您很可能只是将gcc -Wall -o outfile yourfile.cpp
标志传递给编译器并让它工作。如果你正在编译:
gcc -Wall -o outfile yourfile.cpp -fpermissive
尝试使用:
-fpermissive
现在,所有的法律资格和免责声明都适用,你最好解决上面提到的那个警告/错误的原因,但你也可以在大多数情况下通过{{1}}作为临时解决方法