Оператор должен снять «void»

Предположим, у меня есть два класса:

// A struct to hold a two-dimensional coordinate.
struct Point
{
float x;
float y;
};

// A struct identical to Point, to demonstrate my problem
struct Location
{
float x;
float y;
};

Я хотел бы неявно преобразовать Location к Point:

Point somePoint;
Location someLocation;

somePoint = someLocation;

Итак, я добавил это operator внутри Point:

operator Point(Location &other)
{
// ...
}

На котором я собираю с g++ 4.9.2 на Debian, и получите эту ошибку:

error: 'Point::operator Point(Location &other)' must take 'void'

Похоже, что компилятор хочет, чтобы оператор не принимал аргументы, но это кажется неправильным — если я не использую оператор неправильно Каково реальное значение этой ошибки?

0

Решение

Пользовательские операторы преобразования определяются как функция-член для типа от который вы хотите конвертировать в другой тип. Подпись есть (внутри Location учебный класс):

operator Point() const; // indeed takes void
// possibly operator const& Point() const;

Другая возможность заключается в предоставлении конвертирующий конструктор за Point:

Point(Location const& location);
4

Другие решения

Не перегружайте оператора (). Что вы хотите сделать, это создать собственный конструктор, который принимает точку. Компилятор вызывает его, когда вы делаете присваивание или перегружаете оператор присваивания.

   Location( Point& p){
x = p.x;
y = p.y;
}

Location& operator= ( Point& p){
x = p.x;
y = p.y;
return *this;
}

Это получит это для компиляции

  Point somePoint;
Location someLocation;

somePoint = someLocation;
Location loc = somePoint;
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector