函数对象:参数无效

jav*_*gus 0 c++ stl

我是C++和STL的新手.这里有一些我不明白的东西:

class Foo
{
public:
    void operator()(int& bar) { std::cout << bar << std::endl; }
};

int main(int ac, char* av[])
{
    std::vector<int> v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);

    std::for_each(v.begin(), v.end(), Foo); // Invalid argument Foo

    Foo foo;
    std::for_each(v.begin(), v.end(), foo); // Valid argument foo

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么第一次尝试会产生无效参数错误?非常感谢你!

Oli*_*rth 5

因为Foo是一个类(即一个类型),而是foo一个实例(即一个对象). for_each()需要一个对象来使用.

请记住,在C++中,类型不是一流的 ; 它们不能传递给函数等(但是,它们可以用作函数模板参数).