0 / 0 / 0
Регистрация: 25.09.2015
Сообщений: 4
1

Ошибка: "There is no overloaded version of 'setSize' that can be called with these arguments"

25.09.2015, 07:40. Показов 781. Ответов 8
Метки нет (Все метки)

Подскажите, пожалуйста, почему возникает ошибка при трансляции. Текст ошибки: There is no overloaded version of 'setSize' that can be called with these arguments (E2250); место отмечено в листинге:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
unit MatrixAlg;
 
interface
 
type
TVector = record
  V: array of extended;
 private
  function getValue(i: integer): extended;
  procedure setValue(i: integer; Value: extended);
 public
  property p1[i: integer]: extended read getValue write setValue; default;
end;
 
TMatrix = record
  M: array of TVector;
 private
  function getValue(i,j: integer): extended;
  function getVector(i: integer): TVector;
  procedure setValue(i,j: integer; Value: extended);
  procedure setVector(i: integer; Vector: TVector);
 public
  property p1[i: integer]: TVector read getVector write setVector; default;
  property p1[i,j: integer]: extended read getValue write setValue; default;
end;
 
procedure setSize(var Vector: TVector; i: integer); overload;
procedure setSize(var Matrix: TMatrix; i: integer); overload;
procedure setSize(var Matrix: TMatrix; i,j: integer); overload;
function Size(Vector: TVector): integer; overload;
function Size(Matrix: TMatrix): integer; overload;
function Last(Vector: TVector): integer; overload;
function Last(Matrix: TMatrix): integer; overload;
 
implementation
 
procedure setSize(var Vector: TVector; i: integer);
begin
  setlength(Vector.V,i);
end;
 
procedure setSize(var Matrix: TMatrix; i: integer);
begin
  setlength(Matrix.M,i);
end;
 
procedure setSize(var Matrix: TMatrix; i,j: integer);
var k: integer;
begin
  setSize(Matrix,i);
  for k:=0 to i-1 do
  setSize(Matrix[k],j);                                        ОШИБКА!!!
end;
 
function Size(Vector: TVector): integer;
begin
  result:=length(Vector.V);
end;
 
function Size(Matrix: TMatrix): integer;
begin
  result:=length(Matrix.M);
end;
 
function Last(Vector: TVector): integer;
begin
  result:=Size(Vector)-1;
end;
 
function Last(Matrix: TMatrix): integer;
begin
  result:=Size(Matrix)-1;
end;
 
function TVector.getValue(i: integer): extended;
begin
  result:=V[i];
end;
 
procedure TVector.setValue(i: integer; Value: extended);
begin
  V[i]:=Value;
end;
 
function TMatrix.getValue(i,j: integer): extended;
begin
  result:=M[i].V[j];
end;
 
function TMatrix.getVector(i: integer): TVector;
begin
  result:=M[i];
end;
 
procedure TMatrix.setValue(i,j: integer; Value: extended);
begin
  M[i].V[j]:=Value;
end;
 
procedure TMatrix.setVector(i: integer; Vector: TVector);
begin
    M[i]:=Vector;
end;
 
end.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.09.2015, 07:40
Ответы с готовыми решениями:

E2250 "There is no overloaded version of 'StrToInt' that can be called with these arguments"
Добрый день. не могу решить задачу: ввести данные в дбгид вывести сумму массива в едит1 ...

Ошибка: There is no overloaded version of 'Synchronize' that can be called with these arguments
получаю на эту строку Synchronize(UpdateList(jObject.GetValue('name').Value)); полный...

Ошибка: There is no overloaded version of 'FloatToStrF' that can be called with these arguments
Добрый вечер, подскажите, пожалуйста, из-за чего в этом коде может вылетать ошибка, а именно в...

Ошибка: There is no overloaded version of 'inttostr' that can be called with there arguments
Пробую изучить классы. Пишу маленький класс program Project1; uses Dialogs,SysUtils; type...

8
59 / 60 / 37
Регистрация: 24.07.2015
Сообщений: 224
25.09.2015, 09:53 2
Нужно:

Delphi
1
setSize(Matrix,j);
так как Matrix[k] передаёт в процедуру только данные из «record» по конкретному адресу «k», а не всю «Matrix».
0
Модератор
3487 / 2610 / 741
Регистрация: 19.09.2012
Сообщений: 7,971
25.09.2015, 09:55 3
Delphi
1
setSize(Matrix.M[k], j);
0
0 / 0 / 0
Регистрация: 25.09.2015
Сообщений: 4
25.09.2015, 10:13  [ТС] 4
Arik100, процедура SetSize(Matrix,j), как видно из листинга, уже существует и предназначена для иной цели.
FIL, да, всё верно. Но я несколько неправильно выразился. Как я понял, для приведённого выше листинга справедливо следующее: свойство Matrix[k] предполагает только чтение вектора, а процедура SetSize(Matrix[k],j) предполагает изменение, и это противоречие не позволяет обратиться к процедуре
Код
procedure setSize(var Vector: TVector; i: integer);
Вопрос: можно ли преобразовать процедуру setSize или свойство p1[i: integer] так, чтобы процедура setSize была рабочей в том виде, в котором она есть сейчас (по аналогии с процедурой system.setlength)?
0
пофигист широкого профиля
4601 / 3061 / 850
Регистрация: 15.07.2013
Сообщений: 17,651
25.09.2015, 11:28 5
Цитата Сообщение от Rhasta-Rhasta Посмотреть сообщение
Как я понял, для приведённого выше листинга справедливо следующее: свойство Matrix[k] предполагает только чтение вектора
Свойства Matrix[k] вообще нет.
0
0 / 0 / 0
Регистрация: 25.09.2015
Сообщений: 4
25.09.2015, 11:51  [ТС] 6
имеется ввиду свойство по-умолчанию Matrix.p1[i: integer] ...
0
Модератор
3487 / 2610 / 741
Регистрация: 19.09.2012
Сообщений: 7,971
25.09.2015, 11:58 7
Цитата Сообщение от Rhasta-Rhasta Посмотреть сообщение
чтобы процедура setSize была рабочей в том виде
var убери.
0
0 / 0 / 0
Регистрация: 25.09.2015
Сообщений: 4
25.09.2015, 12:02  [ТС] 8
если я уберу var, то вход в процедуру setSize выполнится, но результат изменения длины вектора не сохранится для переменной Matrix[k].
0
Модератор
3487 / 2610 / 741
Регистрация: 19.09.2012
Сообщений: 7,971
25.09.2015, 12:25 9
Цитата Сообщение от Rhasta-Rhasta Посмотреть сообщение
вектора не сохранится
Да, с записями это не работает.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.09.2015, 12:25
Помогаю со студенческими работами здесь

Ошибка: There is no overloaded version of 'IntToHex' that can be called with these arguments
var a:TRegistry; test:array of byte; go,i:integer; s: string; begin a := TRegistry.Create; ...

Ошибка: There is no overloaded version of 'IntToStr' that can be called with these arguments
var Fform1: TFform1; M:array of integer; n,i:integer; implementation {$R *.dfm} ...

Ошибка: There is no overloaded version of 'EncodeBytes' that can be called with these arguments
Всем привет. Подскажите что могло случиться. Раньше все работало. Но на другом компьютере....

Ошибка: There is no overloaded version of floattostr that can be called with these arguments
Объясните пожалуйста в чем ошибка, уже вторые сутки сижу, ничего понять не могу, как заставить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru