Функция перегрузки оператора - PullRequest
0 голосов
/ 05 февраля 2019

Я получил сообщение об ошибке при компиляции кода оператора (двойное значение), показанного ниже.Код просто найти расстояние от точки до начала координат.Пожалуйста, просветите меня, где я ошибся, и покажите, как вы это решаете.Дайте мне знать, если вам нужна дополнительная информация.Спасибо!

Ошибка компиляции msg:

Point.cpp: In member function ‘CS170::Point CS170::Point::operator- 
(double)’:

Point.cpp:187:49: error: no matching function for call to 

‘CS170::Point::Point(double)’

 return Point(sqrt(((x * value) + (y * value))));
                                               ^

Код используется для достижения этой цели в файле драйвера:

pt3 = pt1 - 2;

  Point Point::operator-(double value)
{

    Point temp;
    temp=sqrt(((x * value) + (y * value)));
    return temp ;

}

// файл list.h

 class Point
  {
    public:
     // Constructors (2)
  explicit Point(double x, double y); 

  Point();

   double getX() const;

   double getY() const;

   Point operator+(const Point& other)const ;

   Point& operator+(double value);


   Point operator*(double value) ;

   Point operator%(double angle);


   double operator-(const Point& other)const ;

   Point operator-(double value);

   Point operator^(const Point& other);

   Point operator+=(double value);
   Point& operator+=(const Point& other) ;

   Point& operator++();
   Point operator++(int); 

   Point& operator--(); 
   Point operator--(int); 

   Point& operator-();


        // Overloaded operators (14 member functions)
   friend std::ostream &operator<<( std::ostream &output, const Point 
  &point );
    friend std::istream &operator>>( std::istream  &input, Point 
  &point );

    // Overloaded operators (2 friend functions)

private:
  double x; // The x-coordinate of a Point
  double y; // The y-coordinate of a Point

    // Helper functions
  double DegreesToRadians(double degrees) const;
  double RadiansToDegrees(double radians) const;
   };

 // Point& Add(const Point& other); // Overloaded operators (2 non-member, 
 non-friend functions)
    // Point& Multiply(const Point& other);
    Point operator+( double value, const Point& other );
    Point operator-( double value, const Point& other );

Ответы [ 2 ]

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

Вам нужно создать конструктор Point, который принимает параметр double.

Point (double d){
   //whatever logic of point construction.
};

для устранения ошибки в строке.

temp=sqrt(((x * value) + (y * value)));

Но это закончитсяпостроение точки, как.

Point P = 5;

где-то еще, и вы можете не захотеть, чтобы это произошло.

на вашем месте Я бы сделал это явным конструктором.

explicit Point(double d){
   //whatever logic of point construction.
};

таким образом, вы бы в конечном итоге инициализировали свою точку таким образом, нуждаясь в явном приведении от double к Point

Point P1 = (Point)5;
Point P2 = (Point)sqrt(((x * value) + (y * value)));

, и, наконец, я буду спорить о логике вычитания Point - double, которую вы делаете в своемфункция.

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

Ваш конструктор класса Point принимает два параметра, x и y, тогда как результат sqrt - это одно значение.Если вы хотите использовать одно и то же значение дважды, то либо создайте конструктор, который принимает одно значение, либо присвойте результат sqrt переменной, а затем дважды передайте эту переменную в конструктор.

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