我的代码似乎没有编译。我收到一条错误说:
无法转换点**' to' Point *'争论' 1'
在函数调用的两行中都会发生此错误。我该如何解决这个问题?
我最近刚改变了我的代码,通过引用传递给严格的指针。
// This program computes the distance between two points
// and the slope of the line passing through these two points.
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
struct Point
{
double x;
double y;
};
double dist(Point *p1, Point *p2);
double slope(Point *p1, Point *p2);
int main()
{
Point *p1, *p2;
char flag = 'y';
cout << fixed << setprecision(2);
while(flag == 'y' || flag == 'Y')
{
cout << "First x value: "; cin >> p1->x;
cout << "First y value: "; cin >> p1->y;
cout << "Second x value: "; cin >> p2->x;
cout << "Second y value: "; cin >> p2->y; cout << endl;
cout << "The distance between points (" << p1->x << ", " << p1->y << ") and (";
cout << p2->x << ", " << p2->y << ") is " << dist(&p1, &p2);
if ((p2->x - p1->x) == 0)
{ cout << " but there is no slope." << endl; cout << "(Line is vertical)" << endl; }
else
{ cout << " and the slope is " << slope(&p1, &p2) << "." << endl; }
cout << endl;
cout << "Do you want to continue with another set of points?: "; cin>> flag;
cout << endl;
}
return 0;
}
double dist(Point *p1, Point *p2)
{
return sqrt((pow((p2->x - p1->x), 2) + pow((p2->y - p1->y), 2)));
}
double slope(Point *p1, Point *p2)
{
return (p2->y - p1->y) / (p2->x - p1->x);
}
答案 0 :(得分:1)
说实话,你的代码很好,没有指针。没有必要在这里介绍它们。
如果必须将指针作为赋值的一部分引入并使用pass-by-pointer而不是pass-by-reference,那么您需要进行一些更改。
通过引用更改Point
s中的函数的签名,而不是通过指针取入它们。例如,你有'双斜率(Point * p1,Point * p2)。
在这些函数的调用站点,显式传入参数的地址。例如,不要拨打slope(p1, p2)
,而是写slope(&p1, &p2)
。
更新参数为Point*
的函数体,以使用->
代替.
来访问其字段。
希望这有帮助!
答案 1 :(得分:0)
您所要做的就是接收元素作为指针,将它们作为引用发送并使用运算符->
:
double mydistance(Point *p1, Point *p2)
{
return sqrt((pow((p2->x - p1->x), 2) + pow((p2->y - p1->y), 2)));
}
用
打电话mydistance(&p1,&p2);
实际上,正如您在上一篇文章中指出的那样,重命名距离函数或删除using namespace std
,因为您正在调用std :: distance()。这就是我在这里打电话给mydistance()的原因。