2016-06-16 56 views
-1


我試圖編譯我定製的OpenWRT發行中一個簡單的C++代碼,但我與函數getline指令出錯。
這是我的代碼的快照:C++:ifstream的函數getline問題交叉編譯成的OpenWRT發行

#include <stdio.h>                                                      
#include <string.h> 
#include <unistd.h> 
#include <string> 
#include <iostream> 
#include <sstream> 
#include <fstream> 
#include <algorithm> 
#include <sys/stat.h> 
... 

ifstream infile(MODEL); 
if (infile.fail()) 
    return; 
getline(infile, model); 

... 

我收到這樣的警告的(我與-Werror標誌編譯)

In file included from /home/nino/workspace/fmrepo/fm-mt762x/buildroot/staging_dir/target-mipsel_1004kc+dsp_uClibc-0.9.33.2/usr/include/uClibc++/iostream:30:0, 
       from fmsnmpwalk.cpp:5: 
/home/nino/workspace/fmrepo/fm-mt762x/buildroot/staging_dir/target-mipsel_1004kc+dsp_uClibc-0.9.33.2/usr/include/uClibc++/string_iostream: In instantiation of 'std::basic_istream<charT, traits>& std::getline(std::basic_istream<charT, traits>&, std::basic_string<Ch, Tr, A>&, charT) [with charT = char; traits = std::char_traits<char>; Allocator = std::allocator<char>]': 
/home/nino/workspace/fmrepo/fm-mt762x/buildroot/staging_dir/target-mipsel_1004kc+dsp_uClibc-0.9.33.2/usr/include/uClibc++/string_iostream:114:16: required from 'std::basic_istream<charT, traits>& std::getline(std::basic_istream<charT, traits>&, std::basic_string<Ch, Tr, A>&) [with charT = char; traits = std::char_traits<char>; Allocator = std::allocator<char>]' 
fmsnmpwalk.cpp:47:23: required from here 
/home/nino/workspace/fmrepo/fm-mt762x/buildroot/staging_dir/target-mipsel_1004kc+dsp_uClibc-0.9.33.2/usr/include/uClibc++/string_iostream:97:11: error: comparison between signed and unsigned integer expressions [-Werror=sign-compare] 
    for(i=0;i<n;++i){ 
     ^
cc1plus: all warnings being treated as errors 

我不明白是什麼問題。
在我的OpenWRT發行版中,我使用的是gcc 5.xuClibc-0.9.33.2
任何幫助表示讚賞。謝謝!

+1

你沒有顯示有問題的代碼,但我認爲你有一個變量'n',它的類型是'unsigned int'或'std :: size_t',這會導致這個比較警告。 – ArchbishopOfBanterbury

+0

警告是針對不在代碼快照中的for循環... – Borgleader

回答

1

由於錯誤說:

error: comparison between signed and unsigned integer expressions [-Werror=sign-compare]

所以,你在uClibc中有這樣的代碼for(i=0;i<n;++i){地方++(即,在std::getline),其中in是不同的跡象(或許,iint,而n代表一些長度,並且是size_t,它是無符號的)。

您可以僅使用諸如-Wno-sign-compare之類的內容來關閉此警告。