Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.46 MB
Время: 0.043 c
15-1169509631
Константинов
2007-01-23 02:47
2007.02.11
Интернет провайдер расскажите поподроднее :)


2-1169640296
Vlad Oshin
2007-01-24 15:04
2007.02.11
Функция типа REPLACE в строках, нет ли такой?


15-1169372288
MultiCreator
2007-01-21 12:38
2007.02.11
Работа программы при заблокированной сессии XP


4-1159267238
tst
2006-09-26 14:40
2007.02.11
приклеить дополнительную форму


2-1169756063
jimmk
2007-01-25 23:14
2007.02.11
Сохрание форматированной информации.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский