Например, это:Можно ли установить ссылку на объект класса как параметр по умолчанию в C++ без const?
Class Point{
double x, y;
public:
Point();
bool testequal(const Point& p1, Point& p2 = Point()) const;
}
не работает. Это дает мне ошибку:
error: could not convert 'Point()' from Point to Point&
Это работает, если я использую его в качестве,
bool testequal(const Point& p1, const Point& p2 = Point()) const;
или
bool testequal(const Point& p1, Point p2 = Point()) const;
Но вместо этого я хочу использовать объект p2
в качестве опорного значения, данные могут быть изменены внутри реализации.
Редактировать:
Вот полная программа. Да, это тривиально - я бы предпочел, если бы вы не оценили необходимость этого кода, а вместо этого прокомментировали, можно ли его реализовать.
Если нет, не могли бы вы указать, почему и скажите мне, как правильно это сделать. Перегружает только один вариант?
#ifndef __POINT_H__
#define __POINT_H__
Class Point{
double x, y;
public:
Point();
Point(double xx, double yy);
bool testequal(const Point& p1, Point& p2 = Point()) const;
// this declaration fails. alternative is to use const Point& p2 or Point p2.
// but it is vital that the default parameter should store some value in
// it which can be accessed at the function call location without returning it.
}
#include "Point.h"
Point::Point(): x(0), y(0) {}
Point::Point(double xx, double yy): x(xx), y(yy) {}
bool Point::testequal(const Point& p1, Point& p2){
if (this->x == p1.x && this->y == p1.y){
p2.x = this->x;
p2.y = this->y;
return true;
}
else
return false;
}
Первый способ не может работать, почему вы хотите сохранить ссылку на временный? Вы застрянете с болтающейся ссылкой. Он должен быть либо по значению, либо по константной ссылке, что продлит время жизни. – CoryKramer
временно не может быть привязан к неконтактной ссылке. – Jarod42
Это недопустимый синтаксис C++, в котором задается вопрос, о котором вы спрашиваете. Покажите нам код _actual_, который вы _actually_ компилируете. –