Форум: "Начинающим";
Текущий архив: 2007.02.11;
Скачать: [xml.tar.bz2];
ВнизУказатели Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 2.916 c