2016-02-05 65 views
1

所以,我想讀取.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運行

+2

https://en.wikipedia.org/wiki/Most_vexing_parse – vsoftco

+1

@vsoftco:這不是最*煩人的;這只是一種常見的煩惱。 –

+0

@KerrekSB有區別嗎? ;)我認爲它總是被稱爲「最令人頭疼」。 – vsoftco

回答

4

說這個:

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

您的原始代碼不定義一個變量,但在宣佈的功能。

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

或者在OP不能使用C++ 11的情況下加上其中一個參數。 – vsoftco