我不太擅长编码/编程,但我正在尝试编译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;
最佳答案
int parseIP( uint8_t *out, const char *in )
您需要找到在主程序中调用
parseIP
的位置。参见上面的第二个参数如何为const char *in
。您正确总结可能是在其中生成错误。如果您在调用parseIP
的主程序中签入,则可能会发现您的程序为其传递了char *
参数而不是const char *
。您可以通过将传递给parseIP
的值转换为(char *)示例来在代码中更正此示例:如果找到此代码:somevar = parseIP( outvar, stringin )
将第二个参数强制转换为
(char *)
:somevar = parseIP( outvar, (char *)stringin )
或者您可能只使用编译器
cheat
即可。它给您提示如何做。注意[-fpermissive]
作为警告的一部分。您很有可能只是将-fpermissive
标志传递给编译器并使它工作。如果您使用以下代码进行编译:gcc -Wall -o outfile yourfile.cpp
尝试使用:
gcc -Wall -o outfile yourfile.cpp -fpermissive
现在,所有法律资格和免责声明均适用,您最好按上述方法解决收到警告/错误的原因,但您通常也可以通过
-fpermissive
作为临时解决方法。关于linux - 尝试编译Linux源代码时出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24485406/