Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.05.2013, 21:50   #1
Григоренко Степан
Пользователь
 
Регистрация: 05.05.2011
Сообщений: 35
Вопрос Ошибка с передачей массивов Types of actual and formal var parameters must be identical

Здравия желаю.
Пишу прогу, надо передать массив из процедуры, 2 разных юнита. Возникает ошибка, указанная в заголовке. Десять раз сверил типы. Несмотря на гугление и пользование поиском, ответа не нашел.

Главный юнит:
Код:
unit Main;

interface

implementation

uses
  SysUtils, Input, Procedures;

type
  Massiv1 = array of array of Integer;
  Massiv2 = array of Integer;

procedure MaxNumberColInArray(FileName: String; var Number: Integer);
var
  Matrix: Massiv1;
  M, N: Integer;
  NumArr: Massiv2;
  I, J: Integer;
begin
  Input.ReadMatrix(FileName, Matrix, M, N);

  SetLength(NumArr, 10);
  for I := 0 to 9 do
    NumArr[I] := 0;

  for I := 0 to M - 1 do
    for J := 0 to N - 1 do
      Procedures.CountNumbers(NumArr, Matrix[I, J]);

  Procedures.NumberOfMaxElement(NumArr, Number); Тут оно вообще выдает Incompatible types: 'Procedures.Massiv2' and 'Main.Massiv2'
end;

end.

Юнит с первой процедурой:
Код:
unit Input;

interface

type
  Massiv1 = array of array of Integer;

procedure ReadMatrix(FileName: String; var Matrix: Massiv1; var M, N: Integer);

implementation

procedure ReadMatrix(FileName: String; var Matrix: Massiv1; var M, N: Integer);
var
  F: TextFile;
  I, J: Integer;
begin
  AssignFile(F, FileName);
  Reset(F);

  Readln(F, M);
  Readln(F, N);

  SetLength(Matrix, M, N);

  for I := 0 to M - 1 do
  begin
    for J := 0 to N - 2 do
      Read(F, Matrix[I, J]);
    Readln(F, Matrix[I, J]);
  end;

  CloseFile(F);
end;

end.
Юнит с еще двумя:
Код:
unit Procedures;

interface

type
  Massiv2 = array of Integer;

procedure CountNumbers(var NumArr: Massiv2; NowNumber: Integer);
procedure NumberOfMaxElement(NumArr: Massiv2; var Number: Integer);

implementation

procedure CountNumbers(var NumArr: Massiv2; NowNumber: Integer);
var
  K, I: Integer;
begin
  while NowNumber > 0 do
  begin
    I := NowNumber mod 10;
    Inc(NumArr[I]);
    NowNumber := NowNumber div 10;
  end;
end;

procedure NumberOfMaxElement(NumArr: Massiv2; var Number: Integer);
var
  K: Integer;
begin
  K := 0;
  Number := 0;

  while K <= 9 do
    if NumArr[K] > NumArr[Number] then
      Number := K;
end;

end.
С выносом процедур в другие юниты столкнулся первый раз, поэтому найти ошибку не могу

Последний раз редактировалось Григоренко Степан; 31.05.2013 в 21:54.
Григоренко Степан вне форума Ответить с цитированием
Старый 31.05.2013, 22:19   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
unit Main;

interface

implementation

uses
  SysUtils, Input, Procedures;

type
  Massiv1 = array of array of Integer;
Выделенное убрать
обявление типа должно быть одно! (в даном случае в unit Input)

аналогичное требование (единственность объявления) и для второго объявления
massiv2: array of integer

дважды объявив типы вы сделали ДВА разных(!) типа.
внешне(для человека) они похожы, но не для компилятора!
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 31.05.2013, 22:41   #3
Григоренко Степан
Пользователь
 
Регистрация: 05.05.2011
Сообщений: 35
По умолчанию

Спасибо огромное, заработало!
Григоренко Степан вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передаю переменную, но Types of actual and formal var parameters must be identical bakanaev Общие вопросы Delphi 1 24.05.2013 08:03
Ошибка - [Error] GraphUnit.pas(104): Types of actual and formal var parameters must be identical Ash Общие вопросы Delphi 8 30.10.2012 21:01
Ошибка Not enough actual parameters chubGGPK Софт 1 16.06.2012 02:31
RichView. E2033 Types of actual and formal var parameters must be identical Shouldercannon Общие вопросы Delphi 5 05.06.2012 09:02
[Error] Project2.dpr(36): Types of actual and formal var parameters must be identical vadiprog Помощь студентам 1 15.11.2011 21:35