如何在不对调用方法进行"&"或"*"的情况下给出正确的参数?

How do I give the correct parameters without "&" or "*" to the called method?

本文关键字:情况下 参数 调用 方法      更新时间:2023-10-16

我是新手,对用c ++编写代码很陌生,目前遇到以下问题:

使用库 wykobi 来处理几何并解决了我以前的许多问题,但现在我想使用它创建一个三角形,但无法弄清楚如何正确调用所需的方法。

std::string x_str(argv[2]);
std::string y_str(argv[3]);
double x = atof(x_str.c_str());
double y = atof(y_str.c_str());

[...]

double x2;
x2 = double(orientation.direction.x)+angleRightx;
double y2;
y2 = double(orientation.direction.y)+angleRighty;
double x3;
x3 = double(orientation.direction.x)+angleLeftx;
double y3;
y3 = double(orientation.direction.y)+angleLefty;
wykobi::triangle<wykobi::Float,2> clip_boundry = wykobi::make_triangle<wykobi::Float,2>(&x,&y, &x2,&y2, &x3,&y3);
wykobi::polygon<wykobi::Float,2> clipped_polygon;
wykobi::algorithm::sutherland_hodgman_polygon_clipper<wykobi::point2d<wykobi::Float> >(clip_boundry,wykPG,clipped_polygon);

在创建一个圆之前,我尝试了类似的东西,效果很好:

wykobi::circle<wykobi::Float> circle;
circle.x = x;
circle.y = y;
circle.radius = dist;
wykobi::polygon<wykobi::Float,2> clip_boundry = wykobi::make_polygon<wykobi::Float>(circle,100);
wykobi::polygon<wykobi::Float,2> clipped_polygon;
wykobi::algorithm::sutherland_hodgman_polygon_clipper<wykobi::point2d<wykobi::Float> >(clip_boundry,wykPG,clipped_polygon);

现在编译的问题是:

错误:调用"make_triangle(双*、双*、双*、双*、双*、双*)"没有匹配函数

当我删除与号时:

wykobi::triangle<wykobi::Float,2> clip_boundry = wykobi::make_triangle<wykobi::Float,2>(x,y, x2,y2, x3,y3);

提交时的错误是:

错误:调用"make_triangle(双倍&、双倍&、双倍&、双倍&、双倍&)"没有匹配函数

最后,我调用的方法如下所示:

template<typename T> inline triangle<T,2> make_triangle(const T& x1, const T& y1, const T& x2, const T& y2, const T& x3, const T& y3);

所以我想知道我必须更改什么才能给出正确的参数?

提前感谢!

您至少遇到以下问题:

1)与wykobi::Float混合双倍。

2)您正在传递两个模板参数,而该函数只需要一个。

3)模板推导有望在这里完成。

试试这个代码:

wykobi::make_triangle(x, y, x2, y2, x3, y3);

wykobi::make_triangle<wykobi::Float>(x, y, x2, y2, x3, y3);

wykobi::make_triangle<double>(x, y, x2, y2, x3, y3);

但请确保这些参数分别是 wykobi::Float 或 double。不要把它们混为一谈,除非 wykobi::Float 是某种 typedef。

此外,不要尝试传递地址,因为此模板函数不需要指针。

函数make_triangle<wykobi::Float..()要求您将引用传递给wykobi::Float,但相反,您正在尝试传递类型为 double 的变量。

我不知道库,但看看是否有从doublewykobi::Float类型的显式或隐式转换

例如

wykobi::Float wx1 = x;

wykobi::Float wx1 = new wykobi::Float(x);

然后将这些传递给 make_triangle 函数。

此外,根据 Laslo 的评论,常量2似乎对模板参数无效 - 这应该是一个type,例如 int。

查看 wykobi 标头,看起来wykobi::Floatfloatdouble 的 typedef,具体取决于编译器选项。从你的错误来看,我敢打赌它是float.

因此,您的解决方案是保持一致并使用wykobi::Float而不是double任何地方,和/或使用定义WYKOBI_DOUBLE_PRECISION编译库。

另一种选择是在不指定模板参数的情况下调用函数,因为编译器会自动推断它们。但是,如果您不一致,则在混合doublefloat时会出现奇怪的错误。

wykobi::triangle<double,2> clip_boundry =
        wykobi::make_triangle(x,y, x2,y2, x3,y3);

将推断出:

wykobi::triangle<double,2> clip_boundry =
        wykobi::make_triangle<double>(x,y, x2,y2, x3,y3);

请注意,2不是函数的模板参数。

相关文章: