【问题标题】:cannot iterate on a vector [duplicate]无法迭代向量[重复]
【发布时间】:2016-02-05 00:56:18
【问题描述】:

所以,我想从 .txt 文件中读取值,值是在同一行上的非常简单的四个浮点值。 我是这样写的:

int read_calibration () {

  std::ifstream input("floor.txt");
  if (!input.good())
  {
        cout << "floor info file does not exist!" << endl;
    return -1;
  }
  std::vector<float> data(std::istream_iterator<float>(input),
                      std::istream_iterator<float>());

  for (std::vector<float>::iterator it = data.begin() ; it != data.end(); ++it)
    std::cout << ' ' << *it;

  return 0;
}

当我构建它时,我得到了这个错误:

 error: request for member ‘begin’ in ‘data’, which is of non-class type ‘std::vector<float>(std::istream_iterator<float>, std::istream_iterator<float> (*)())’
 for (std::vector<float>::iterator it = data.begin() ; it != data.end(); ++it)

我在 Ubuntu 14.04 上使用 gcc 版本 4.8.4 运行

【问题讨论】:

  • @vsoftco:这不是烦恼的;这只是普通的烦恼。
  • @KerrekSB 有区别吗? ;) 我认为它总是被称为“最令人烦恼的”。
  • 对我来说 "normal" 是没有参数的,而 most 是有参数的。
  • @KerrekSB 我认为这就是创造术语“最令人烦恼的解析”的确切情况

标签: c++ vector most-vexing-parse


【解决方案1】:

改为这样说:

std::vector<float> data(std::istream_iterator<float>(input), {});

您的原始代码不是定义变量,而是声明函数。

【讨论】:

    【解决方案2】:

    最令人头疼的解析:-/

    使用{}

    std::vector<float> data{std::istream_iterator<float>(input),
                            std::istream_iterator<float>()};
    

    auto data = std::vector<float>(std::istream_iterator<float>(input),
                                   std::istream_iterator<float>());
    

    【讨论】:

    • 或者用括号括起来以防OP不能使用C++11。
    猜你喜欢
    • 2018-12-25
    • 2011-07-04
    • 1970-01-01
    • 2016-06-29
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 2015-07-03
    • 1970-01-01
    相关资源
    最近更新 更多