如何在没有“&”的情况下提供正确的参数或“*”到被调用的方法?

时间:2014-04-06 10:04:14

标签: c++

我是新手,在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(double *,double *,double *,double *,double *,double *)'

当我删除&符号时:

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

关于通讯的错误是:

错误:没有匹配函数来调用'make_triangle(double&amp;,double&amp;,double&amp;,double&amp;,double&amp;,double&amp;)'

最后我调用的方法如下:

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);

所以我想知道如何更改以提供正确的参数?

提前致谢!

3 个答案:

答案 0 :(得分:13)

您至少遇到以下问题:

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,否则不要混淆它们。

另外,不要尝试传递地址,因为这个模板函数不期望指针。

答案 1 :(得分:11)

函数make_triangle<wykobi::Float..()要求您传递对wykobi::Float的引用,而是尝试传递double类型的变量。

我不知道该库,但看看是否存在从doublewykobi::Float类型的明确或隐式转换

e.g。

wykobi::Float wx1 = x;

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

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

另外,根据Lazlo的评论,常量2似乎对模板参数无效 - 这应该是type,例如中间体

答案 2 :(得分:11)

查看wykobi headers,看起来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不是函数的模板参数。