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

Вниз

Указатели   Найти похожие ветки 

 
VladSel   (2007-01-24 04:18) [0]

Здравствуйте, помогите пожалуйста с указателями:
приведеный текст работает нормально, но если раскомментировать строку с //???????????????????????, то почему-то перестаёт работать.
Для проветки использую berakpoint на стоке //*********** и смотрю что находиться в "c1_"
И как можно добавлять элементы Тс1 в Тс2 используя одну переменную c1 в процедуре: procedure TForm1.Button1Click(Sender: TObject);

Спасибо за помощь.

unit Unit1;

interface

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

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

 pc1=^tc1;
 Tc1=class
 private
   { Private declarations }
   FKod:integer;
   FName:string;
 public
   { Public declarations }
   property Kod:integer read FKod write FKod;
   property Name:string read FName write FName;
 end;

 Tc2=class
 private
   { Private declarations }
   FList:TList;
   FGetItem: Tc1;
 public
   { Public declarations }
   constructor Create;
   procedure add_(const value:Tc1);
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

{ Tc2 }

procedure Tc2.add_(const value: Tc1);
var p:pc1;
begin
 //вставляем
 new(p);
 p:=@value;
 FList.Add(p);
end;

constructor Tc2.Create;
begin
 FList:=TList.Create
end;

procedure TForm1.Button1Click(Sender: TObject);
var c1, c11, c1_, c_1_:Tc1;
   c2:Tc2;
   s, s_:string;
   i:integer;
   p, p1:pc1;
begin
 //Создание объекта
 c2:=Tc2.Create;
 //Создание элемента
 c1:=Tc1.Create;
 c1.Kod:=1;
 c1.Name:="Name_1";
 //Добавление элемента в объект
 c2.add_(c1);

 //Проверка
 p:=c2.FList.Items[0];
 c1_:=p^;
 s:=c1_.Name;

 //Создадим второй элемент
 c11:=Tc1.Create;
 c11.Kod:=2;
 c11.Name:="Name_2";
 //добавим элемент в объект
 c2.add_(c11);

 //Проверка
 p:=c2.FList.Items[1];
 c1_:=p^;
 s:=c1_.Name; //***********

 //Проверка
 for i:=0 to c2.FList.Count-1 do
 begin
   p1:=c2.FList.Items[i];
   c_1_:=p1^;
   if c_1_<>nil then
//      s_:=c_1_.Name; //???????????????????????
 end;
end;

end.


 
MBo ©   (2007-01-24 07:26) [1]

pc1=^tc1;
Tc1=class

классы в Дельфи уже и так указатели, так что избавляйся от паскальной работы с указателями/разыменованием


 
TRUNK ©   (2007-01-24 10:14) [2]

Вот как это нужно делать:


var
 c2: Tc2;

procedure Tc2.add_(const value: Tc1);
begin
//вставляем
FList.Add(Pointer(Value));
end;

constructor Tc2.Create;
begin
FList := TList.Create;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
c1: Tc1;
s: string;
i: Integer;
begin
//Создание объекта
c2 := Tc2.Create;
//Создание элемента
c1 := Tc1.Create;
c1.Kod := 1;
c1.Name := "Name_1";
//Добавление элемента в объект
c2.add_(c1);

//Проверка
s := Tc1(c2.FList.Items[0]).Name;

//Создадим второй элемент
c1 := Tc1.Create;
c1.Kod := 2;
c1.Name := "Name_2";
//Добавим элемент в объект
c2.add_(c1);

//Проверка
s := Tc1(c2.FList.Items[1]).Name; //***********

//Проверка
for i := 0 to c2.FList.Count-1 do
 if (c2.FList.Items[i] <> nil) then
   s := Tc1(c2.FList.Items[i]).Name; //???????????????????????
end;



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

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

Наверх




Память: 0.47 MB
Время: 0.036 c
15-1169041480
не очень
2007-01-17 16:44
2007.02.11
проводил собеседование


2-1169635834
tytus
2007-01-24 13:50
2007.02.11
Какое сообщение нужно обрабатывать для полос прокрутки формы?


2-1169578515
ы
2007-01-23 21:55
2007.02.11
подскажите


11-1148011453
vvedensky
2006-05-19 08:04
2007.02.11
Ошибка при компиляции TKOLProject


6-1157706811
bober
2006-09-08 13:13
2007.02.11
сокеты