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中。因此,如果有一个最新的编译器,这段代码应该可以。哎呀,我的错了,我要加一条注释。纳瓦兹干杯,我仍在努力想办法解决它,但再次感谢!为纳瓦兹干杯,我仍在努力想办法解决这个问题,但再次感谢你!