Ошибки компиляции при расчете расстояния между двумя точками - PullRequest
1 голос
/ 05 февраля 2012

Я не могу понять, почему эта программа не работает.Я уверен, что это что-то базовое.

#include <iostream>
using namespace std;
class MyPoint
{
    int x;
    int y;
public:
    MyPoint()
    {
        x = 0;
        y = 0;
    }

    MyPoint(int newX, int newY)
    {
        x = newX;
        y = newY;
    }

    int getX()
    { 
        return x;
    }

    int getY()
    {
        return y;
    }

    int distance(MyPoint newPoint)
    {
      distance = x - newPoint.getX();//need absolute value function
      return distance;
    };

  int main()
  {
    MyPoint point1(0,0);
    MyPoint point2(5,5);

    cout << "THe distance between the two circles is " << point1.distance(point2) << endl;

    return 0;
  }

Я пытаюсь найти расстояние между двумя точками и просто проверить, чтобы убедиться, что я правильно использую классы.Я просто использую только точку x.Прямо сейчас код не скомпилируется.

Ответы [ 4 ]

4 голосов
/ 05 февраля 2012

Теперь ваша первая проблема в том, что main находится внутри класса - вы забыли закрыть скобку после функции distance. У вас есть точка с запятой для окончания описания класса, но у вас всего одна закрывающая скобка, слишком мало.

Ваша вторая проблема заключается в том, что вы используете переменную с именем distance внутри функции с именем distance. Не допускайте столкновений с именами, они заставляют котят плакать.

Ваша третья проблема в том, что переменная distance, которую я только что упомянул, должна иметь тип int.

В качестве еще одного общего совета, компиляторы выдают сообщения об ошибках , когда ваш код не компилируется. Их публикация полезна.

3 голосов
/ 05 февраля 2012

Ваша проблема заключается в функции distance:

int distance(MyPoint newPoint)
{
  distance = x - newPoint.getX();//need absolute value function
  return distance;
};

Здесь у вас есть переменная с именем distance, которая нигде не объявлена, а также перегружена именем функции. Вместо этого вам нужно объявить новую локальную переменную, а затем вернуть ее или просто вернуть сразу:

Вариант 1:

int distance(MyPoint newPoint)
{
  int d = x - newPoint.getX(); // renamed d, adding int
  return d;
};

Вариант 2:

int distance(MyPoint newPoint)
{
  return x - newPoint.getX();
};
1 голос
/ 05 февраля 2012

1) Закрыть скобку после функции расстояния.
2) Реализация функции расстояния не является правильной.

Если вы действительно хотите рассчитать расстояние между двумя точками, вы должны написать что-то вроде:

double distance(MyPoint newPoint)
{
  double distance;
  distance=sqrt((x-newPoint.getX())*(x-newPoint.getX())
                    +(y-newPoint.getY())*(y-newPoint.getY()));
  return distance;
}

Он найдет расстояние, используя теорему Пифагора.
1) объявление переменной расстояния с типом double.
2) вычисление расстояния по теореме Пифагора.
3) возвращаемое значение переменной.

0 голосов
/ 05 февраля 2012

У вас есть ошибка в фигурных скобках.

Код ниже работает правильно: (РЕДАКТИРОВАТЬ) - добавлен абс, как правильно указано AIs

#include <iostream>
using namespace std;
class MyPoint
{
int x;
int y;
public:
MyPoint()
{
    x = 0;
    y = 0;
}

MyPoint(int newX, int newY)
{
    x = newX;
    y = newY;
}

int getX()
{
    return x;
}

int getY()
{
    return y;
}

int distance(MyPoint newPoint)
{
  return abs(newPoint.getX() - x);//need absolute value function

}
};

int main()
{
MyPoint point1(0,0);
MyPoint point2(5,5);

cout << "THe distance between the two circles is " << point1.distance(point2) << endl;

return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...