2012-03-23 3 views
0

Я хочу определить константу с записями, где одна переменная является классом. и получить сообщение об ошибке: [DCC Error] usample.pas (18): Постоянное выражение E2026 ожидаетсяКласс доступа к записи

класса и записи в декларации Unit1:

type TParentClass = class (TObject) 
function Call(s: string) : boolean; 
end; 

type TMyRecord = record 
s: string; 
c: TParentClass; //or TClass 
end; 

И Unit2 с классом детей и записи:

type TChildClass = class (TParentClass); 
procedure two; 

var: 
    class_var: TChildClass; 

const 
rec_var : array[0..1] of TMyRecord = (
    (s : ''; c : class_var) //Error with class_var. 
); 

UPD: Я хочу заполнить запись классом и функциями поиска unit1 в этом классе. Это командный проект.

UPD2:

const 
    class_var: TChildClass = nil; 

же ошибка.

+3

Этого просто не может быть сделано. Константа может содержать только константы. –

+0

Что вы пытаетесь сделать? Где будет задан 'class_var'? –

ответ

2

Поскольку, как компилятор говорит, вам нужно поместить константу, но вы определили class_var как переменную.

Измените class_var на константу, а не на переменную.

Но это не может фактически быть сделано:

const 
    class_var = TParentClass; 

не допускается.

И

const 
    class_var : TClass = TParentClass; 

не реального постоянной, и вы не можете использовать его в другой постоянной декларации.

+0

@ Françoisvar: const class_var: TChildClass = nil; Такая же ошибка. –

+0

@ МиколаРоманюк, см. Мое обновление. Вам нужна постоянная ** настоящая постоянная. –

+0

@ Françoisvar: Могу ли я попытаться использовать указатель в классе между константой класса? –

0

Вы не можете определить константу с полем, инициализированным содержимым переменной. Компилятор должен оценивать константы во время компиляции, т. Е. Когда class_var даже не имеет местоположения, не обращайте внимания ни на какой контент.

Забудьте об этой идее. Если вы можете, объявите rec_var как переменную и загрузите ее во время выполнения.

2

В вашем последнем обновлении вы спросите, почему это не компилируется:

const 
    class_var: TChildClass = nil; 

rec_var: TMyRecord = (s: ''; c: class_var); 

Причина, по которой не компилируется, что class_var не true constant. Вы можете написать это:

rec_var: TMyRecord = (s: ''; c: nil); 

потому что nil является истинной константой.

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

+0

Да, это работа, но мне нужно изменить nil на созданную переменную класса thet require function, которая также должна быть передана в запись. –

+0

Я этого не понимаю. –

+0

Я полагаю, что op означает, что указатель может быть const, поэтому указатель класса не изменится, однако сам класс может измениться. – none

Смежные вопросы