![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
компилятор не распознает класс [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 что?