перегрузка оператора :=

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

перегрузка оператора :=

Сообщение AlexP » 04.10.2007 18:19:06

Делаю все как написано в примере в хелпе (Ref.pdf) -

Код: Выделить всё
type
complex = record
  re : real;
  im : real;
end;

Operator := (C : Complex) z : complex;


На последней строке получаю ошибку -

Error: Impossible to overload assignment for equal types

Это действительно невоможно, несмотря на то, что в хелпе приведен такой пример? Или я делаю что-то не так?
AlexP
новенький
 
Сообщения: 20
Зарегистрирован: 11.05.2007 19:04:01

Re: перегрузка оператора :=

Сообщение Aisa » 09.02.2009 14:09:53

up
Aisa
незнакомец
 
Сообщения: 9
Зарегистрирован: 12.12.2007 16:59:56

Re: перегрузка оператора :=

Сообщение bw » 09.02.2009 14:29:21

Привет.

Во первых, учим английский, или хотя бы учимся пользоваться переводчиком: Error: Impossible to overload assignment for equal types.
Во вторых, кто за вас будет "тело оператора" писать?
Код: Выделить всё
Operator := (c: Real) z: Complex;
begin
  z.re := c;
  z.im := 0;
end;


В той же документации всё написано, достаточно было перевернуть на следующую страницу.

..bw
Аватара пользователя
bw
постоялец
 
Сообщения: 359
Зарегистрирован: 01.12.2005 11:36:23
Откуда: Усть-Илимск

Re: перегрузка оператора :=

Сообщение Aisa » 09.02.2009 15:19:19

Первоначальный вопрос был не мой, но я наткнулся на такую же проблему и апнул топик двухлетней давности. Лично мне нужно нужно присвоить одной записи другую запись того же типа, чтобы не прописывать присвоение всех полей по отдельности. У меня не получается. Здесь аналогичный вопрос. И проблема не в английском и не в теле оператора.

Error: Impossible to overload assignment for equal types
You can not overload assignment for types that the compiler considers as equal.
Aisa
незнакомец
 
Сообщения: 9
Зарегистрирован: 12.12.2007 16:59:56

Re: перегрузка оператора :=

Сообщение VirtUX » 09.02.2009 16:18:43

Aisa писал(а):Лично мне нужно нужно присвоить одной записи другую запись того же типа, чтобы не прописывать присвоение всех полей по отдельности. У меня не получается.

Код: Выделить всё
type
  rec = record
    f1: AnyType;
    f2: AnyType;
end;

var
  r1, r2: rec;

begin
  r1.f1 := AnyWhat;
  r1.f2 := AnyWhat;
  r2 := r1;
end;

Вы хотите сказать, что так не работает?
У меня все прекрасно работает.
Последний раз редактировалось VirtUX 09.02.2009 16:40:09, всего редактировалось 1 раз.
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: перегрузка оператора :=

Сообщение Aisa » 09.02.2009 16:33:26

Ох. У меня проблема возникла при сравнении, начал разбираться с перегрузкой операторов и меня коротнуло на присвоение. В случае сравнения все нормально перегружается, спасибо.
Aisa
незнакомец
 
Сообщения: 9
Зарегистрирован: 12.12.2007 16:59:56

Re: перегрузка оператора :=

Сообщение bw » 09.02.2009 19:13:22

Aisa писал(а):Лично мне нужно нужно присвоить одной записи другую запись того же типа, чтобы не прописывать присвоение всех полей по отдельности.

Код: Выделить всё
type
  Complex = record
    re: Real;
    im: Real;
  end;

var
  a, b: Complex;
begin
  a := b;
end.

FPC 2.2.0, всё прекрасно работает, без переопределения оператора.

Добавлено спустя 57 секунд:
Aisa писал(а):В случае сравнения все нормально перегружается, спасибо.

Теперь понятно :-).

..bw
Аватара пользователя
bw
постоялец
 
Сообщения: 359
Зарегистрирован: 01.12.2005 11:36:23
Откуда: Усть-Илимск


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

Рейтинг@Mail.ru