Включение указателей

0

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

не может преобразовать 'Point **' в '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
    Что вы подразумеваете под "включить указатели в программу?" Не похоже, что вам нужны указатели здесь.
  • 0
    Правда. Моя программа компилируется отлично, но для удовлетворения требований проекта мне нужно преобразовать ее в указатели. Вместо того, чтобы переходить по ссылке с указателями, мне нужно строго использовать указатели. @templatetypedef
Показать ещё 3 комментария
Теги:
pointers

2 ответа

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
    Понял. Спасибо чувак!
1

Честно говоря, ваш код в порядке, без указателей. Там нет реальной необходимости вводить их здесь.

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

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

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню