Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Incompatible types


Автор: Vello 14.8.2010, 03:29
Помогите согласовать типы в двух юнитах, первый - основной, где находиться основное тело калькулятора, второй - это юнит в котором описано функции расчета комплексных чисел. Как вы поняли разговоро пойдет о комплексных числах. В первом юните я создал тип запись, который включает две переменные типа double:

Код

type
    TComplex = record
    a, b: double;
end;


Во втором я создал идентичную запись:

Код

type
    TComplex = record 
    a, b: double; 
  end;


В формулах я использую не на прямую переменную этого типа, а работаю с поинтером таким вот способом:

Код

function C_AddN(a, b: ComplexPtr): ComplexPtr; //result:=a+b RECTANGULAR
begin
  result := new(ComplexPtr);
  result.a := a.a + b.a;
  result.b := a.b + b.b;
end;


Но когда я пытаюсь вызвать эти формулы таким способом:
Код

RGCOut := C_AddN(Comp1, Comp2);


(Где Comp1, Comp2 - поинтеры на тип TComplex). Компилятор выбивает ошибку "[Error] MiniCalc1.pas(483): Incompatible types: 'MiniCalc1.TComplex' and 'ComplexRec.TComplex'". Вроде бы эти типы идентичны, но почему они не могут согласоваться? smile 

Автор: CodeMonkey 14.8.2010, 05:26
Потому что это разные типы.

В чём сокровенный смысл объявления двух типов, которые бинарно и функционально эквивалентны?

Добавлено через 54 секунды
Аналогия: стоит у дороги два дома, слева и справа. Дома идентичны, они шаблонные, построены по одному проекту. Но это же разные дома.

Автор: Vello 14.8.2010, 14:39
Спасибо большое, это помогло разобраться в проблеме.

Автор: AntonN 14.8.2010, 14:56
CodeMonkey
Цитата

Аналогия: стоит у дороги два дома, слева и справа. Дома идентичны, они шаблонные, построены по одному проекту. Но это же разные дома. 

проект ведь один, и планировка одинакова.
Сокровенный смысл может быть простой - юниты разных разработчиков используемые в своем проекте, в которых описан одинаково тип. Может же быть такая ситуация?

Автор: Vello 14.8.2010, 16:25
в общем я все обдумал и можно все сделать с помощью не типизированных поинтеров. Но я поступил проще я использовал тот тип, который описан во втором юните в первом, на этом ошибка себя исчерпала smile .

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)