【问题标题】:C++: ifstream getline issue crosscompiling into an OpenWRT distroC++:ifstream getline 问题交叉编译到 OpenWRT 发行版中
【发布时间】:2016-06-16 16:37:18
【问题描述】:


我正在尝试在我的自定义 OpenWRT 发行版中编译一个简单的 C++ 代码,但 getline 指令出现错误。
这是我的代码的快照:

#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
任何帮助表示赞赏。谢谢!

【问题讨论】:

  • 您没有显示有问题的代码,但我假设您有一个变量 n,其类型为 unsigned intstd::size_t,这会导致此比较警告。
  • 警告是针对不在您的代码快照中的 for 循环...

标签: c++ ifstream getline openwrt uclibc


【解决方案1】:

正如错误所说:

错误:有符号和无符号整数表达式之间的比较 [-Werror=sign-compare]

所以,您在 uClibc++ 中的某处(即std::getline)中有此代码for(i=0;i&lt;n;++i){,其中in 具有不同的符号(也许iint 而@ 987654327@ 代表一些长度,是一个size_t,它是无符号的)。

您可以使用 -Wno-sign-compare 之类的内容关闭此警告。

【讨论】:

    猜你喜欢
    • 2011-06-09
    • 1970-01-01
    • 2012-07-24
    • 1970-01-01
    • 2016-08-25
    • 1970-01-01
    • 1970-01-01
    • 2016-12-24
    • 2021-07-26
    相关资源
    最近更新 更多