我不太擅长编码/编程,但我正在尝试编译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/

10-09 00:45
查看更多