Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

компилятор не распознает класс [D7]


umbra ©   (2011-03-18 15:33:00) 

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

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

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

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


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


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


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


umbra   (2011-03-18 16:15:00) [2]

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


umbra   (2011-03-18 16:13:00) [3]

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


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

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


umbra   (2011-03-18 15:59:00) [5]


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


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


clickmaker   (2011-03-18 15:57:00) [6]

with TClassFinder.Create(TTest, false)


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

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


umbra   (2011-03-18 15:52:00) [8]

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


umbra   (2011-03-18 15:49:00) [9]


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


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

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

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


clickmaker   (2011-03-18 15:44:00) [10]

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


umbra   (2011-03-18 15:43:00) [11]

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


umbra   (2011-03-18 15:39:00) [12]

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


clickmaker   (2011-03-18 15:36:00) [13]

do что?


Наверх

Титульная страница Поиск, карта сайта Написать письмо