Главная страница
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.01 c
15-1299856019
anton773
2011-03-11 18:06
2011.06.26
как сравнить время


2-1300262871
fred
2011-03-16 11:07
2011.06.26
AV


2-1300265235
>|<
2011-03-16 11:47
2011.06.26
Как организовать именованные массивы в Delphi?


15-1299172170
И. Павел
2011-03-03 20:09
2011.06.26
QReport vs Rave


4-1227677945
Саня
2008-11-26 08:39
2011.06.26
Перехват названий окон и приложений