Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Непонятка с классами / 7 сообщений из 7, страница 1 из 1
27.12.2017, 16:09
    #39576958
Exteris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятка с классами
Приветствую всех!

Есть простейший проект -
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
unit main;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Menus, Vcl.StdCtrls,
  vetis;

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

var
  fmMain: TfmMain;
  Vetis: TVetis;

implementation

{$R *.dfm}

uses udm;

procedure TfmMain.Button1Click(Sender: TObject);
begin
   Vetis:=TVetis.Create;
   Vetis.GeoSpr.Create;
end;

end.



В нем модуль -
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
unit vetis;

interface

uses
  Classes, forms, windows,dialogs;


type
  TGeoSpr = class;

  TVetis = class(TObject)
  private
  public
     GeoSpr: TGeoSpr;
     constructor Create;
     destructor Destroy; override;
  end;

  TGeoSpr = class(TVetis)
  private
  public
     constructor Create;
     destructor Destroy; override;
  end;

implementation

constructor TVetis.Create;
begin
   inherited Create;
end;

destructor TVetis.Destroy;
begin
   inherited Destroy;
end;

constructor TGeoSpr.Create;
begin

end;

destructor TGeoSpr.Destroy;
begin
  inherited Destroy;
end;

end.



При вызове Vetis.GeoSpr.Create ошибка -
Код: plaintext
1.
2.
---------------------------
Project geo.exe raised exception class $C0000005 with message 'access violation at 0x00407fe7: read of address 0x00000000'.

Что нужно написать в constructor TGeoSpr.Create? Или сама конструкция в принципе неверна?
...
Рейтинг: 0 / 0
27.12.2017, 16:32
    #39576986
Gerasimenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятка с классами
Exteris,

Vetis.GeoSpr:=TGeoSpr.Create; ?
...
Рейтинг: 0 / 0
27.12.2017, 16:49
    #39577003
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятка с классами
GerasimenkoVetis.GeoSpr:=TGeoSpr.Create; ?Причем в конструкторе TVetis
...
Рейтинг: 0 / 0
28.12.2017, 06:42
    #39577204
Exteris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятка с классами
_Vasilisk_GerasimenkoVetis.GeoSpr:=TGeoSpr.Create; ?Причем в конструкторе TVetis
Это да. А если я не хочу сразу создавать этот объект? Их теоретически будет много побольше.
...
Рейтинг: 0 / 0
28.12.2017, 07:30
    #39577212
Cobalt747
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятка с классами
Exteris_Vasilisk_пропущено...
Причем в конструкторе TVetis
Это да. А если я не хочу сразу создавать этот объект? Их теоретически будет много побольше.

Тогда сделай функцию, которая будет возвращать этото объект, и при первом обращении будет создавать его

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
  TVetis = class(TObject)
  private
    FGeoSpr: TGeoSpr;
  public
     function GeoSpr: TGeoSpr;


function TVetis.GeoSpr: TGeoSpr;
begin
  if FGeoSpr = nil then 
    FGeoSpr := TGeoSpr.Create;
  Result := FGeoSpr;
end;
...
Рейтинг: 0 / 0
28.12.2017, 07:33
    #39577214
Exteris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятка с классами
Cobalt747Exterisпропущено...

Это да. А если я не хочу сразу создавать этот объект? Их теоретически будет много побольше.

Тогда сделай функцию, которая будет возвращать этото объект, и при первом обращении будет создавать его

[/src]
Это уже вариант, спасибо.
...
Рейтинг: 0 / 0
28.12.2017, 07:48
    #39577221
Tactical Nuclear Penguin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятка с классами
Exteris_Vasilisk_пропущено...
Причем в конструкторе TVetis
Это да. А если я не хочу сразу создавать этот объект? Их теоретически будет много побольше.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
  TVetis = class(TObject)
  private
    FGeoSpr: TGeoSpr;
    function GetGeoSpr: TGeoSpr;
  public
    property GeoSpr: TGeoSpr read GetGeoSpr;
    constructor Create;
    destructor Destroy; override;
  end;

function TVetis.GetGeoSpr: TGeoSpr;
begin
  if FGeoSpr = nil then
    FGeoSpr := TGeoSpr.Create;
  result := FGeoSpr;
end;
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Непонятка с классами / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]