2014-09-10 3 views
0

Мой код, кажется, не компилируется. Я получаю сообщение об ошибке сказав:Включая указатели

не может преобразовать «Точка **» в «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); 
} 
+1

Что вы подразумеваете под «включить указатели в программу?» Не похоже, что вам нужны указатели. – templatetypedef

+0

Правда. Моя программа отлично компилируется, но для удовлетворения требований проекта мне нужно преобразовать ее в указатели. Вместо того, чтобы передавать ссылку с помощью указателей, мне нужно строго использовать указатели. @templatetypedef – Cody

+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().

+0

Получил это. Спасибо чувак! – Cody

1

Чтобы быть абсолютно честным, ваш код в порядке, без указателей. Здесь нет никакой реальной возможности представить их здесь.

Если вы должны ввести указатели как часть задания и использовать pass-by-pointer, а не pass-by-reference, то вам нужно внести несколько изменений.

  1. Изменение подписи функций, которые принимают в Point с помощью ссылки, чтобы взять их в указателем вместо этого. Например, у вас будет двойной наклон (Point * p1, Point * p2).

  2. На сайтах вызовов этим функциям явным образом передаю адрес этого параметра. Например, вместо того, чтобы звонить slope(p1, p2), напишите slope(&p1, &p2).

  3. Обновить тела функций, аргументы которых Point* s использовать -> вместо . для доступа к их полям.

Надеюсь, это поможет!

Смежные вопросы