我是新手,在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);
所以我想知道如何更改以提供正确的参数?
提前致谢!
答案 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
类型的变量。
我不知道该库,但看看是否存在从double
到wykobi::Float
类型的明确或隐式转换
e.g。
wykobi::Float wx1 = x;
或
wykobi::Float wx1 = new wykobi::Float(x);
然后将这些传递给make_triangle
函数。
另外,根据Lazlo的评论,常量2
似乎对模板参数无效 - 这应该是type
,例如中间体
答案 2 :(得分:11)
查看wykobi headers,看起来wykobi::Float
是float
或double
的typedef,具体取决于编译器选项。根据您的错误,我打赌它是float
。
因此,您的解决方案应保持一致,并在任何地方使用wykobi::Float
代替double
,和/或使用定义WYKOBI_DOUBLE_PRECISION
编译库。
另一种选择是在不指定模板参数的情况下调用函数,因为编译器会自动推导出它们。但是,如果你不一致,混合double
和float
时会出现奇怪的错误。
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
不是函数的模板参数。