C++ 使用for_Each算法时无效使用void表达式错误

C++ 使用for_Each算法时无效使用void表达式错误,c++,foreach,C++,Foreach,我得到一个错误:在我的draw\u all\u seq\u inside2方法中无效使用void表达式错误 template <typename Container> void draw_all_seq_inside(Container &c, const rectangle &w){ typename Container::iterator iter; for(iter = c.begin() ; iter != c.end() ; iter++){

我得到一个
错误:在我的
draw\u all\u seq\u inside2
方法中无效使用void表达式
错误

template <typename Container>
void draw_all_seq_inside(Container &c, const rectangle &w){
    typename Container::iterator iter;
    for(iter = c.begin() ; iter != c.end() ; iter++){
            (*iter)->inside_window(w._btm_left, w._top_right);
    }
}

template <typename Container>
void draw_all_seq_inside2(Container &c, const rectangle &w){
    for_each(c.begin(),c.end(),draw_all_seq_inside(c, w));
}
模板
内部无效绘制所有顺序(容器和c、常量矩形和w){
typename容器::迭代器iter;
对于(iter=c.begin();iter!=c.end();iter++){
(*iter)->内窗(左、右上);
}
}
模板
无效绘制所有内部2(容器和c、常数矩形和w){
对于每个(c.begin(),c.end(),在(c,w)中绘制所有的顺序;
}
我正在为每个算法调用
中的
draw\u all\u seq\u in
,我这样做是否正确

for_each(c.begin(),c.end(),draw_all_seq_inside(c, w));
第三个参数应该是一个可调用的实体。也就是说,它可以是函数对象,也可以是函数指针,它可以接受容器
c
元素类型的一个参数

但在代码中,您调用函数并将返回值(即
void
)作为第三个参数传递给
std::for_each
。这就是错误的原因

第三个参数应该是一个可调用的实体。也就是说,它可以是函数对象,也可以是函数指针,它可以接受容器
c
元素类型的一个参数

但在代码中,您调用函数并将返回值(即
void
)作为第三个参数传递给
std::for_each
。这就是错误的原因。

您不能这样做

每个
的第三个参数是采用单个参数的函数对象
for_each
随后将迭代第一个和第二个参数指定的序列,并将每个元素的值传递给该函数对象

当使用
for_each
比编写
for
循环更详细时,它非常有用。这里看起来不是这样,但是如果你真的想为每个
使用
,你只有一个选择

编写一个类:

template <typename Container>
void draw_all_seq_inside2(Container &c, const rectangle &w) {

    class Func
    {
        const rectangle & _w;
    public:
        Func(const rectangle &w) : _w(w) {}

        void operator()(/* type here */ * val)
        {
            val->inside_window(_w._btm_left, _w._top_right);
        }
    };
    for_each(c.begin(),c.end(), Func(w));
}
模板
无效绘制所有内部2(容器和c、常数矩形和w){
类函数
{
常数矩形&_w;
公众:
Func(常数矩形&w):_w(w){}
void运算符()(/*在此处键入*/*val)
{
val->内窗口(左、右、右、右);
}
};
对于每个(c.begin()、c.end()、Func(w));
}
这段代码似乎只适用于兼容C++11的编译器。如果您使用C++03实现,请将类定义移到
draw\u all\u seq\u inside2

之外,您不能这样做

每个
的第三个参数是采用单个参数的函数对象
for_each
随后将迭代第一个和第二个参数指定的序列,并将每个元素的值传递给该函数对象

当使用
for_each
比编写
for
循环更详细时,它非常有用。这里看起来不是这样,但是如果你真的想为每个
使用
,你只有一个选择

编写一个类:

template <typename Container>
void draw_all_seq_inside2(Container &c, const rectangle &w) {

    class Func
    {
        const rectangle & _w;
    public:
        Func(const rectangle &w) : _w(w) {}

        void operator()(/* type here */ * val)
        {
            val->inside_window(_w._btm_left, _w._top_right);
        }
    };
    for_each(c.begin(),c.end(), Func(w));
}
模板
无效绘制所有内部2(容器和c、常数矩形和w){
类函数
{
常数矩形&_w;
公众:
Func(常数矩形&w):_w(w){}
void运算符()(/*在此处键入*/*val)
{
val->内窗口(左、右、右、右);
}
};
对于每个(c.begin()、c.end()、Func(w));
}

这段代码似乎只适用于兼容C++11的编译器。如果使用C++03实现,请将类定义移到
draw_all_seq_inside2

之外,因为
Func
是一个本地类,所以它不能在函数模板中使用(尽管我不确定)。本地类可以在C++11中用作模板参数。不是在C++03中。因此,如果有一个最新的编译器,这段代码应该可以。哦,我的错,我要补充一点。我认为,由于
Func
是一个本地类,它不能在函数模板中使用(尽管我不确定)。本地类可以在C++11中用作模板参数。不是在C++03中。因此,如果有一个最新的编译器,这段代码应该可以。哎呀,我的错了,我要加一条注释。纳瓦兹干杯,我仍在努力想办法解决它,但再次感谢!为纳瓦兹干杯,我仍在努力想办法解决这个问题,但再次感谢你!