[英]c++ vector generate function class object
我必须在vector上使用“ generate”功能来创建10个对象。 我有带构造函数的Point类:
Point(){
this->x=rand()%100;
this->y=rand()%100;
};
然后创建一个向量并使用“生成”功能:
vector<Point> v (10);
generate (v.begin(), v.end(), Point());
当我编译它时,我收到此错误:
Type 'Point' does not provide a call operator
我不知道为什么
似乎您想用Point
默认构造实例填充向量。
在遇到实际问题之前,无需调用std::generate
,因为v
已经具有Point
10个默认构造实例。
但是,如果您真的要调用它, std::generate
希望将Generator
作为函数对象,即具有operator()
的对象。 Point
没有一个,编译器抱怨。 传递lambda是一个好主意,因为它们是这样的函数对象:
std::generate(v.begin(), v.end(), []() {
return Point{};
});
这里描述了生成器功能的原型。 它必须是一个返回下一个要生成的值的函数。 您正在传递一个Point
默认构造实例。 也许您试图提供Point
的构造函数作为生成器函数,但是构造函数不满足要求(它不返回任何内容),永远不要直接调用它,并且永远不能获得它的地址(也不能得到)对一个的引用)。
您必须提供一个单独的函数,该函数仅返回点。 最简单的方法是传递std::generate
一个lambda函数。 您将执行以下操作:
std::vector<Point> v(10);
std::generate(v.begin(), v.end(), []() { return Point{}; });
但是,请注意,行std::vector<Point> v(10);
已经创建了10个默认构造的Point
对象。 由于您的随机化逻辑位于默认构造函数中,因此在这种情况下使用std::generate
是多余的。
您需要一个生成积分的函数
Point RandomPoint() { return Point(); }
int main(int argA, char** argV)
{
vector<Point> v(10);
generate(v.begin(), v.end(), RandomPoint);
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.