2014-06-30 60 views
0

我不太擅長編碼/編程,但我正在嘗試編譯Linux源代碼。嘗試編譯Linux源代碼時出錯

繼errormessage的顯示出來:

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; 
} 

希望有人可以幫助。

問候, 馬克

嗨大衛,

我已經找到了部分被它被稱爲,並試圖改變它,但還是同樣的errormessage的同時採用日「製作」命令。

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
int parseIP(uint8_t *out, const char *in) 

你需要找到parseIP被稱爲在你的主程序。請參閱上面的第二個參數是如何const char *in。你可以正確地認爲這可能是錯誤產生的地方。如果你在你的主程序中檢入了parseIP,你可能會發現你的程序傳遞了一個char *參數而不是const char *。您可以通過傳遞給parseIP值鑄造(字符*)示例代碼中糾正這一點,如果你發現這個:

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作爲臨時解決方法。