如何在不对调用方法进行"&"或"*"的情况下给出正确的参数?
How do I give the correct parameters without "&" or "*" to the called method?
我是新手,对用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
的变量。
我不知道库,但看看是否有从double
到wykobi::Float
类型的显式或隐式转换
例如
wykobi::Float wx1 = x;
或
wykobi::Float wx1 = new wykobi::Float(x);
然后将这些传递给 make_triangle
函数。
此外,根据 Laslo 的评论,常量2
似乎对模板参数无效 - 这应该是一个type
,例如 int。
查看 wykobi 标头,看起来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
不是函数的模板参数。
- 在没有参数列表的情况下使用模板名称"Event"无效,模板问题
- 在不传递参数数量且只有3个点的情况下,如何使用变差函数
- G++ C++17 类模板参数推导在非常特殊的情况下不起作用
- 如何在不知道C++中有多少可选参数的情况下在循环中使用va_arg?
- 如何在不强制转换每个参数的情况下删除初始值设定项列表中从 int 到 char 的缩小转换?
- 如何在不使用指针的情况下将派生类的对象作为参数传递给基类中的函数?
- 如何在不传递命令行参数的情况下在 c++ 中设置环境变量
- C++有什么方法可以在既不调用函数模板也不提供其模板参数的情况下引用函数模板?
- 是否可以在不填充自己的参数的情况下将模板函数作为参数传递?
- 我应该如何在没有变量的情况下将相同的参数传递给 CMAKE 中的多个目标?
- 是否可以在不扣除的情况下将模板参数转发到 make_*?
- 为什么或在什么情况下,你会将参数作为C++中的引用(或指针)传递给函数?
- 如何在给定 std::variant 的情况下检索模板参数包?
- 在C++中,有没有一种方法可以让我在不传递参数的情况下拥有一个函数
- 如何在没有参数包的情况下编写变差函数
- 如何在不使用文件扩展名的情况下使用命令行参数打开C++中的文本文件?
- 此函数如何在不传递任何参数的情况下工作?
- 在什么情况下,使用'const T*'输入参数比'const T&'更可取?
- 如何在没有可变参数函数的情况下循环函数的参数
- 是否有可能在没有复制的情况下传递 std::vector<int> 作为参数来获得 std::vector<std::array<int, 3>>?