Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.06.26;
Скачать: CL | DM;

Вниз

компилятор не распознает класс   Найти похожие ветки 

 
umbra ©   (2011-03-18 15:33) [0]

Здравствуйте!

Есть такой вот тестовый код:

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type

 TTest = class(TPersistent)
 end;

 TTestClass = class of TTest;

 TForm1 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 with TClassFinder.Create(TTestClass, false) do
   ;
end;

end.


Вопрос: почему при синтаксическом анализе компилятор на выделенной строке выдает такую вот ошибку :
[Error] Unit1.pas(34): "(" expected but "," found

Почему он хочет открывающую скобку после класса?


 
clickmaker ©   (2011-03-18 15:36) [1]

do что?


 
umbra ©   (2011-03-18 15:39) [2]

неважно что. это у меня не компилируется и ошибку выдает на выделенной строке.


 
umbra ©   (2011-03-18 15:43) [3]

этот код не проходит синтаксического анализа. это баг анализатора в Д7, что ли?


 
clickmaker ©   (2011-03-18 15:44) [4]

а почему это должно компилироваться? и даже если скомпилируется, что вообще этот код должен полезного делать?


 
umbra ©   (2011-03-18 15:49) [5]


> а почему это должно компилироваться?


вы скажите, почему не должно? TClassFinder - это класс из Classes.pas, конструктор у него объявлен вот так:

constructor Create(AClass: TPersistentClass = nil; AIncludeActiveGroups: Boolean = False);

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


 
umbra ©   (2011-03-18 15:52) [6]

это сугубо тестовый код и ничего полезного, кроме демонстрации странного поведения компилятора, он делать не предназначен :)


 
Юрий Зотов ©   (2011-03-18 15:55) [7]

А так:
with TClassFinder.Create(TTest, false) do...
работает?


 
clickmaker ©   (2011-03-18 15:57) [8]

with TClassFinder.Create(TTest, false)


 
umbra ©   (2011-03-18 15:59) [9]


> А так:
> with TClassFinder.Create(TTest, false) do...
> работает?
>


спасибо. затупил я, однако :(


 
Юрий Зотов ©   (2011-03-18 16:09) [10]

В первом параметре должен быть КЛАСС, а не МЕТАкласс.


 
umbra ©   (2011-03-18 16:13) [11]

да я уже понял. спасибо еще раз


 
umbra ©   (2011-03-18 16:15) [12]

а компилятор же мне намекал - приведи типы,  да приведи типы. Но я его не понял. :)


 
Дмитрий Белькевич   (2011-03-18 23:35) [13]


> а компилятор же мне намекал - приведи типы,  да приведи
> типы. Но я его не понял. :)


Компилятору стоит верить. Причем воспринимать дословно.



Страницы: 1 вся ветка

Текущий архив: 2011.06.26;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.013 c
2-1300882916
Sergey2
2011-03-23 15:21
2011.06.26
значение тега по имени его атрибута TWebBrowser


15-1299760193
Юрий
2011-03-10 15:29
2011.06.26
С днем рождения ! 9 марта 2011 среда


2-1300290965
lewka
2011-03-16 18:56
2011.06.26
Работа с текстом в MS Word


2-1300253790
Ghost del vonte
2011-03-16 08:36
2011.06.26
Обход папок файлов, доступ к которым запрещен системой!


2-1300865735
lewka
2011-03-23 10:35
2011.06.26
Текст в TLabel