不能迭代矢量

时间:2016-02-05 00:56:18

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

所以,我想从.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)

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

2 个答案:

答案 0 :(得分:4)

改为说:

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

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

答案 1 :(得分:3)

最令人烦恼的解析: - /

使用{}

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>());