错误:'结果'没有命名类型

时间:2015-10-05 13:12:53

标签: c++ vector

我想在我的数据集中找到最小值。

#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm> 
#include <iterator>  


int main(){
std::vector<double> v;
std::ifstream inputFile1("263_V01_C02_R099_THx_BL_128H.dat");

if (inputFile1) {        
    double value;
    while ( inputFile1 >> value ) {
        v.push_back(value);
    }
}

auto result = std::min_element(std::begin(v), std::end(v));

}

我已经看过以前的回复,人们指的是没有包含迭代器。如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

auto C ++ 11 说明符。你需要一个C ++ 11编译器。

使用 gcc ,您可以使用-std=c++11启用C ++ 11功能:

gcc exaple:

g++ -std=c++11 main.cpp

来自cppreference.com

  

自动说明符(自C ++ 11起)   指定将从其初始化程序自动推导出声明的变量的类型。

如果您没有C ++ 11编译器,那么您需要定义具体类型。 例如:

std::vector<double>::iterator result = ...

BTW:std::begin()std::end()也是C ++ 11的功能。

答案 1 :(得分:2)

正如sergej已经指出的那样auto是一个C ++ 11说明符/关键字。

如果您无法访问C ++ 11编译器,您仍然可以使用它来使代码正常工作。

#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm> 
#include <iterator>  


int main() {
    std::vector<double> v;
    std::ifstream inputFile1("263_V01_C02_R099_THx_BL_128H.dat");

    if (inputFile1) {
        double value;
        while (inputFile1 >> value) {
            v.push_back(value);
        }
    }

    double result = 0; //Or other default value
    std::vector<double>::iterator minIter = std::min_element(v.begin(), v.end());
    if (minIter != v.end())
    {
        result = (*minIter);
    }
    std::cout << "Result is " << result << std::endl;

}

其他提示:

在这种情况下,代码中的

autostd::vector<double>::iterator相同。所以你将得到一个迭代器。

在使用之前,应始终检查.end()的返回值迭代器。

修改: 正如sergej和NathanOliver所指出的那样,使用v.begin()v.end()代替std::begin(v)std::end(v)