Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ошибка Access violation 
:(
    Опции темы
jorka
Дата 16.11.2008, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 25.10.2008

Репутация: нет
Всего: нет



ошибка возникает в конструкторе, я в ООП не силен, подскажите что не так

Код

constructor TPackage.create;
  begin
    inherited;
    SetKind(0);         // <- тут ошибка
    SetColor(clBlack);
    SetR(0);
    SetR2(0);
    .....


ЗЫ TPackage - базовый класс
PM MAIL   Вверх
Christoph
Дата 16.11.2008, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 667
Регистрация: 23.1.2008
Где: Харьков

Репутация: 5
Всего: 11



А если TPackage базовый класс, разве у него может быть предок? ОТ кого наследуются методы? в Базовом классе не может быть inherited


--------------------
user posted image
PM MAIL ICQ   Вверх
jorka
Дата 16.11.2008, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 25.10.2008

Репутация: нет
Всего: нет



Цитата(Christoph @ 16.11.2008,  13:33)
А если TPackage базовый класс, разве у него может быть предок? ОТ кого наследуются методы? в Базовом классе не может быть inherited

убрал inherited, проблема всеравно осталась, на том же поле.

ЗЫ я где-то читал что все базовые классы наследуются от TObject
PM MAIL   Вверх
SneG0K
Дата 16.11.2008, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 3
Всего: 54



Это разбирать надо SetKind(). И не обязательно это от конструктора, может все хорошо создалось, а SetKind() пытается прочитать\записать не созданную переменную или наоборот.
PM WWW Skype   Вверх
jorka
Дата 16.11.2008, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 25.10.2008

Репутация: нет
Всего: нет



Цитата(SneG0K @ 16.11.2008,  14:14)
Это разбирать надо SetKind(). И не обязательно это от конструктора, может все хорошо создалось, а SetKind() пытается прочитать\записать не созданную переменную или наоборот.

SetKind() это процедура того же класса TPackage.

Код

procedure TPackage.SetKind(v: integer);
  begin
    kind :=v;
  end;


я попробовал написать так:

Код

constructor TPackage.create;
  begin
    kind:=0;    // <- тут ошибка
    Color := clBlack;
   ...


надо ж все-таки задать параметры по умолчанию, и всеравно таже ошибка(

ЗЫ   kind это переменная класса TPackage.
 private kind: integer;
PM MAIL   Вверх
THandle
Дата 16.11.2008, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 50
Всего: 372



jorka, покажи весь свой код, весь этот класс.


А инициализировать все нулями - незачем. Все это происходит уже в TObject.InitInstance, на сколько я понял:
Код

FillChar(Instance^, InstanceSize, 0);

PM   Вверх
Sansa
Дата 16.11.2008, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 18.10.2006
Где: Королев

Репутация: нет
Всего: 6



Хотелось бы видеть полную интерфейсную часть класса
--------------------
- Здравствуйте, я Ваш патологоанатом
PM MAIL ICQ   Вверх
jorka
Дата 16.11.2008, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 25.10.2008

Репутация: нет
Всего: нет



Код

type
  TMatrix=array[0..3,0..3] of real;

type
  TVector=array[0..3] of real;

type
  TAA = array[0..31] of TVector;
  
type
  TPackage=class
  private kind: integer;
  private P1: TVector;
  private Color:TColor;

  private P2: TVector;
  private R: double;
  private R2: double;
  private Points: TAA;

  private h: Double;
  private Rx: Single;
  private Ry: Single;
  private Rz: Single;
  private Rot: Boolean;

  public procedure SetKind(v: integer);
  public function GetKind:integer;
  public procedure SetPoint(v:TVector);
  public function GetPoint:TVector;
  public procedure SetPoint2(v:TVector);
  public function GetPoint2:TVector;
  public procedure SetColor(col:TColor);
  public function GetColor:TColor;
  public procedure SetR(vR:double);
  public function GetR:double;
  public procedure SetR2(vR2:double);
  public function GetR2:double;

  public procedure SetX(X:real);
  public function GetX:real;
  public procedure SetY(Y:real);
  public function GetY:real;
  public procedure SetZ(Z:real);
  public function GetZ:real;

  public procedure SetX2(X:real);
  public function GetX2:real;
  public procedure SetY2(Y:real);
  public function GetY2:real;
  public procedure SetZ2(Z:real);
  public function GetZ2:real;
  public procedure SetPoints(poi:TAA);
  public function GetPoints:TAA;

  public procedure SetH(vH:double);
  public function GetH:double;
  public procedure SetRX(vX:double);
  public function GetRX:double;
  public procedure SetRY(vY:double);
  public function GetRY:double;
  public procedure SetRZ(vZ:double);
  public function GetRZ:double;
  public procedure SetRot(vRot:Boolean);
  public function GetRot:Boolean;

  public constructor create;
  public procedure Delete;
end;

implementation

//-------------------------------  TPackage  -----------------------------------

procedure TPackage.SetKind(v: integer);
  begin
    kind :=v;
  end;

function TPackage.GetKind:integer;
  begin
    result:=kind;
  end;

procedure TPackage.SetPoint(v:TVector) ;
  begin
    P1:= v;
  end;

function TPackage.GetPoint:TVector;
  begin
    result:=P1;
  end;

procedure TPackage.SetPoint2(v:TVector) ;
  begin
    P2:= v;
  end;

function TPackage.GetPoint2:TVector;
  begin
    result:=P2;
  end;

procedure TPackage.SetColor(col:TColor);
  begin
    Color := col;
  end;

function TPackage.GetColor:TColor;
  begin
    result:=Color;
  end;

procedure TPackage.SetR(vR:double);
  begin
     R := vR;
  end;

function TPackage.GetR:double;
  begin
    result := R;
  end;

procedure TPackage.SetR2(vR2:double);
  begin
     R2 := vR2;
  end;

function TPackage.GetR2:double;
  begin
    result := R2;
  end;

procedure TPackage.SetX(X:real);
  begin
     P1[0] := X;
  end;

function TPackage.GetX:real;
  begin
    result := P1[0];
  end;

procedure TPackage.SetY(Y:real);
  begin
     P1[1] := Y;
  end;

function TPackage.GetY:real;
  begin
    result := P1[1];
  end;


procedure TPackage.SetZ(Z:real);
  begin
     P1[2] := Z;
  end;

function TPackage.GetZ:real;
  begin
    result := P1[2];
  end;


procedure TPackage.SetX2(X:real);
  begin
     P2[0] := X;
  end;

function TPackage.GetX2:real;
  begin
    result := P2[0];
  end;

procedure TPackage.SetY2(Y:real);
  begin
     P2[1] := Y;
  end;

function TPackage.GetY2:real;
  begin
    result := P2[1];
  end;


procedure TPackage.SetZ2(Z:real);
  begin
     P2[2] := Z;
  end;

function TPackage.GetZ2:real;
  begin
    result := P2[2];
  end;




procedure TPackage.SetPoints(poi:TAA);
  var i:integer;
  begin
     for i := 0 to 31 do
       Points[i]:= poi[i];
  end;

function TPackage.GetPoints:TAA;
  var i:integer;
  begin
     for i := 0 to 31 do
       result[i]:= Points[i];
  end;


 procedure TPackage.SetH(vH:double);
  begin
     H := vH;
  end;

function TPackage.GetH:double;
  begin
    result := H;
  end;

procedure TPackage.SetRX(vX:double);
  begin
     Rx := vX;
  end;

function TPackage.GetRX:double;
  begin
    result := Rx;
  end;


procedure TPackage.SetRY(vY:double);
  begin
     Ry := vY;
  end;

function TPackage.GetRY:double;
  begin
    result := Ry;
  end;

procedure TPackage.SetRZ(vZ:double);
  begin
     Rz := vZ;
  end;

function TPackage.GetRZ:double;
  begin
    result := Rz;
  end;

  procedure TPackage.SetRot(vRot:Boolean);
  begin
     Rot := vRot;
  end;

function TPackage.GetRot:Boolean;
  begin
    result := Rot;
  end;

constructor TPackage.create;
  begin
    //inherited;
    kind:=0;
    Color := clBlack;


    SetKind(0);
    SetColor(clBlack);
    SetR(0);
    SetR2(0);
    SetX(0);
    SetY(0);
    SetZ(0);
    SetX2(0);
    SetY2(0);
    SetZ2(0);
    SetH(0);
    SetRX(0);
    SetRY(0);
    SetRZ(0);
    SetRot(false);
 end;

procedure TPackage.Delete;
  begin
    free;
  end;


PM MAIL   Вверх
THandle
Дата 16.11.2008, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 50
Всего: 372



jorka

1) Зачем столько раз писать type, private, public...?

Код

type
  TMatrix = array[0..3,0..3] of real;
  TVector = array[0..3] of real;
  TAA = array[0..31] of TVector;

  TPackage=class
  private
    kind: integer;
    P1: TVector;
    Color:TColor;
    P2: TVector;
    R: double;
    R2: double;
    Points: TAA;
    h: Double;
    Rx: Single;
    Ry: Single;
    Rz: Single;
    Rot: Boolean;
  public
    procedure SetKind(v: integer);
    function GetKind:integer;
    procedure SetPoint(v:TVector);
    function GetPoint:TVector;
    procedure SetPoint2(v:TVector);
    function GetPoint2:TVector;
    procedure SetColor(col:TColor);
    function GetColor:TColor;
    procedure SetR(vR:double);
    function GetR:double;
    procedure SetR2(vR2:double);
    function GetR2:double;
    procedure SetX(X:real);
    function GetX:real;
    procedure SetY(Y:real);
    function GetY:real;
    procedure SetZ(Z:real);
    function GetZ:real;
    procedure SetX2(X:real);
    function GetX2:real;
    procedure SetY2(Y:real);
    function GetY2:real;
    procedure SetZ2(Z:real);
    function GetZ2:real;
    procedure SetPoints(poi:TAA);
    function GetPoints:TAA;
    procedure SetH(vH:double);
    function GetH:double;
    procedure SetRX(vX:double);
    function GetRX:double;
    procedure SetRY(vY:double);
    function GetRY:double;
    procedure SetRZ(vZ:double);
    function GetRZ:double;
    procedure SetRot(vRot:Boolean);
    function GetRot:Boolean;
    constructor create;
    procedure Delete;
end;


2) Зачем инициализировать нулями?
3) Какая хоть ошибка? У меня все нормально компилируется и создается.
4) Лучше используй свойства.

PM   Вверх
jorka
Дата 16.11.2008, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 25.10.2008

Репутация: нет
Всего: нет



Цитата(THandle @ 16.11.2008,  14:39)
jorka

1) Зачем столько раз писать type, private, public...?
2) Зачем инициализировать нулями?
3) Какая хоть ошибка? У меня все нормально компилируется и создается.
4) Лучше используй свойства.

1) Не освоился еще
2) Не знаю, думал конструктор для этого и нужен
3) Если с классом все нормально, тогда возможно я не правильно его вызываю

Код

  var
    SetPackage: TPackage;
  begin
    SetPackage.create;
    SetPackage.SetKind(1);
    ...

я правильно делаю?

4) Какие свойства?
PM MAIL   Вверх
THandle
Дата 16.11.2008, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 50
Всего: 372



Цитата(jorka @  16.11.2008,  14:50 Найти цитируемый пост)
я правильно делаю?


нет.

Код

SetPackage := TPackage.Create;


Цитата(jorka @  16.11.2008,  14:50 Найти цитируемый пост)
Какие свойства? 


property. Почитай либо в книжке какой либо в интернете/на форуме поищи smile
PM   Вверх
jorka
Дата 16.11.2008, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 25.10.2008

Репутация: нет
Всего: нет



Цитата(THandle @ 16.11.2008,  14:54)
Код

SetPackage := TPackage.Create;


всё зашуршало, работает)

Спасибо.
PM MAIL   Вверх
Christoph
Дата 16.11.2008, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 667
Регистрация: 23.1.2008
Где: Харьков

Репутация: 5
Всего: 11



А вот еще вопрос...так чисто для себя! Вот смотрите чем отличается переменная класса от свойства? То что для свойства устанавливается метод чтения и записи?

P.s THandle Красивей было если бы отдельно были процедуры, отдельно функции  smile 


--------------------
user posted image
PM MAIL ICQ   Вверх
jorka
Дата 16.11.2008, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 25.10.2008

Репутация: нет
Всего: нет



вопрос не по теме:
  есть две формы, вторая show когда на первой нажимается кнопка. почему form2.create происходит после того как выполнится form1.create ?
PM MAIL   Вверх
Christoph
Дата 16.11.2008, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 667
Регистрация: 23.1.2008
Где: Харьков

Репутация: 5
Всего: 11



ну можно создаавать форму вторую по нажатию кнопки, или сразу при запуске проги, создавать две формы!
Имхо без кода тяжело говорить

Это сообщение отредактировал(а) Christoph - 16.11.2008, 21:41


--------------------
user posted image
PM MAIL ICQ   Вверх
jorka
Дата 16.11.2008, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 25.10.2008

Репутация: нет
Всего: нет



все оказалось намного проще и веселее, все дело в файле проекта, там есть строка

Код

Application.CreateForm(TForm2, Form2);


а если ее удалить, то можно уже и экспериментировать smile 
PM MAIL   Вверх
SneG0K
Дата 16.11.2008, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 3
Всего: 54



А какое отношение форма имеет к твоему классу?
PM WWW Skype   Вверх
jorka
Дата 16.11.2008, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 25.10.2008

Репутация: нет
Всего: нет



Цитата(SneG0K @ 16.11.2008,  22:44)
А какое отношение форма имеет к твоему классу?

никакого smile 
PM MAIL   Вверх
SneG0K
Дата 16.11.2008, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 3
Всего: 54



Цитата(jorka @  16.11.2008,  22:10 Найти цитируемый пост)
никакого

дак че, когда ты убрал инициализацию формы все заработало?
PM WWW Skype   Вверх
Christoph
Дата 16.11.2008, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 667
Регистрация: 23.1.2008
Где: Харьков

Репутация: 5
Всего: 11



Не понимаю что тут хотят сделать  smile Кста мне так за свойства никто и не ответил  smile 


--------------------
user posted image
PM MAIL ICQ   Вверх
jorka
Дата 17.11.2008, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 25.10.2008

Репутация: нет
Всего: нет



Цитата(SneG0K @ 16.11.2008,  23:16)
Цитата(jorka @  16.11.2008,  22:10 Найти цитируемый пост)
никакого

дак че, когда ты убрал инициализацию формы все заработало?

да, убрал инициализацию из файла проекта и впихнул в кнопку ) теперь при нажатии кнопки у меня создается новая форма(количество не ограничено) с определенными параметрами. дело в том что в Form2.create у меня прописан код отрисовки моделей, и он выполнялся без параметров при запуске первой формы, а теперь норм)
PM MAIL   Вверх
THandle
Дата 17.11.2008, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 50
Всего: 372



Christophhttp://forum.vingrad.ru/articles/topic-157712.html

Тут посмотри про свойства.


jorka, подозрительно это все. Значит ты вручную создаешь форму. А освобождаешь ли ты память? Лучше покажи код, а то утечки там могут быть не маленькие...
PM   Вверх
Mariska
Дата 24.11.2008, 19:52 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 24.11.2008

Репутация: нет
Всего: нет



Мальчики помогите сдать практику пожалуйста!!!!!!!!!

Добавлено через 1 минуту и 14 секунд
 smile 
PM MAIL   Вверх
Qu1nt
Дата 24.11.2008, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 13.1.2007

Репутация: 22
Всего: 50



Mariska, я тебя благословляю!)
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1104 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.