Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Синтаксис
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.01.2010, 13:32
Аватар для NIch
NIch NIch вне форума
Продвинутый
 
Регистрация: 02.06.2008
Адрес: Бендеры ПМР
Сообщения: 754
Репутация: 2446
По умолчанию Синтаксис Delphi 7 и Delphi 2010

Почему-то на объявление класса типа
Код:
unit UnitMain;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Buttons, ExtCtrls;
type
  TWLD = class//класс
  type //8 строка
    TH = record//тип запись в классе
      Name : string[10];
    end;//конец записи
  var
    H : TH;
  end;//конец класса 24 строка
var
 WLD : TWLD;
//*****************************************************************************
implementation //28 строка
end.
Delphi 7 ворчит не может, а Delphi 2010 прожевал и не поперхнулся...
Вот ошибки Delphi 7
Цитата:
[Error] UnitMain.pas(8): 'END' expected but 'TYPE' found
[Error] UnitMain.pas(24): 'IMPLEMENTATION' expected but ';' found
[Error] UnitMain.pas(28): '.' expected but 'IMPLEMENTATION' found
[Fatal Error] FormMain.pas(34): Could not compile used unit 'UnitMain.pas'
Может кто знает ответ, как мне в Delphi 7 реализовать...
__________________
В начале был Бит, потом Байт и только потом появилось Слово...
Ответить с цитированием
  #2  
Старый 28.01.2010, 13:53
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Странно, что не попернулся т.к. у вас записано следующее:
Код:
type
  TWLD = class type TH = record Name : string[10]; end;
Не мог компилятор ни 10-ки ни 7-ки такую конструкцию пропустить.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 28.01.2010, 14:07
Аватар для NIch
NIch NIch вне форума
Продвинутый
 
Регистрация: 02.06.2008
Адрес: Бендеры ПМР
Сообщения: 754
Репутация: 2446
По умолчанию

Может подскажешь, как сделать...
В некотором классе, мне нужно объявить тип данных record...
Что я и сделал
Цитата:

type
TH = record
Name : string[10];
end;
Далее хочу создать переменную этого типа
Цитата:
var
H : TH;
Класс объявлен стандартно
Цитата:
type
TWLD = class
...
end;
var
WLD : TWLD;
Что не так непонятно...
Повторюсь (только что проверил) Delphi 7 выдает вышенаписанные ошибки, Delphi 2010 компилирует программу...
__________________
В начале был Бит, потом Байт и только потом появилось Слово...

Последний раз редактировалось NIch, 28.01.2010 в 14:13.
Ответить с цитированием
  #4  
Старый 28.01.2010, 14:26
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Оставим новые фичи 10-ки в покое, это явно не ваш случай. Вам нужно видимо такое:
Код:
Type
 TMyRec = record
   FN,MN,LN: String;
 end;

 TMyCalss = class
  MyRec: TMyRec;
 end;

Var
 MR: TMyRec;
 MC: TMyClass;
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 28.01.2010, 18:55
Аватар для NIch
NIch NIch вне форума
Продвинутый
 
Регистрация: 02.06.2008
Адрес: Бендеры ПМР
Сообщения: 754
Репутация: 2446
По умолчанию

Весь прикол в том, что я не хочу выносить тип MyRecord за пределы класса...
Какой тогда смысл в отдельном классе...Можно просто в юните объявить все типы данных, переменные и процедуры с функциями...
И вообще я не понимаю, почему в классе нелься объявить свой тип данных...
Может что то в настройках компилятора изменить...ну или диррективы какие есть...буду копать...
Спасибо за ответы...
__________________
В начале был Бит, потом Байт и только потом появилось Слово...
Ответить с цитированием
  #6  
Старый 28.01.2010, 19:17
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Цитата:
Весь прикол в том, что я не хочу выносить тип MyRecord за пределы класса...
Ага, понял. Вам видимо вот что требуется:
Делаете так:
Код:
Type
 TMyClass = class
  T: record A: String; B: String; end;
 end;
Т.е. происходит неявное объявление классовой переменной T непосредственно в теле класса.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #7  
Старый 28.01.2010, 19:34
Аватар для NIch
NIch NIch вне форума
Продвинутый
 
Регистрация: 02.06.2008
Адрес: Бендеры ПМР
Сообщения: 754
Репутация: 2446
По умолчанию

Вот тут хороший пример того что я хочу...
http://www.delphibasics.ru/Record.php
Цитата:
type
// Объявление записи клиента
TCustomer = Record
firstName : string[20];
lastName : string[20];
address1 : string[100];
address2 : string[100];
address3 : string[100];
city : string[20];
postCode : string[8];
end;
var
John, Sarah : TCustomer;
Только как бы всё это засунуть в класс...
Я создаю объект класса и хочу работать только с ним не подключая дополнительных классов или типов данных... А то что это получается внутри класса нельзя использовать type???Только var или const, что то неверится...
__________________
В начале был Бит, потом Байт и только потом появилось Слово...
Ответить с цитированием
  #8  
Старый 28.01.2010, 19:57
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Внутри описания класса вообще-то var и const тоже нельзя использовать в обычном виде. Ссылку я посмотрел, но что-то не уловил связи с вашим первоначальным вопросом.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #9  
Старый 28.01.2010, 20:22
Аватар для NIch
NIch NIch вне форума
Продвинутый
 
Регистрация: 02.06.2008
Адрес: Бендеры ПМР
Сообщения: 754
Репутация: 2446
По умолчанию

Млин, поработал с Delphi 2010, нахватался его приколов...
Проверил, type, var и const внутри объявления класса вызывают такие ошибки у Delphi 7...
Повторюсь 3-й раз (в последний) в Delphi 2010 это проходит...
//*************
Страдалецъ спасибо за советы по сабжу...Давай о другом...
//*************
Подскажи как бы разумнее сделать?
Есть
TMyRec : record
...
end;
TMyRec1 : record;
..
end;
Нужно еще и так
Arr : array of TMyRec;
Arr1 : array of TMyRec1;
Т.е. нужен массив записей...
Пробую, пишет
"Undeclared identifier TMyRec"
оно и понятно, нельзя создать массив переменных)))
Не хотелось бы отказываться от удобства примения классов, но видимо придется(((
__________________
В начале был Бит, потом Байт и только потом появилось Слово...
Ответить с цитированием
  #10  
Старый 28.01.2010, 21:42
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Почти правильно:
Надо:
Type
TMyRec = record
...
end;
TMyRec1 = record
..
end;
Нужно еще и так
Var
Arr : array of TMyRec;
Arr1 : array of TMyRec1;

Не забудьте только задать размер массива SetLength(Arr, 10);
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #11  
Старый 28.01.2010, 21:45
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Надо поплотнее D2010 посмотреть, а то я только поставил, посмотрел, что он ничем от D2009 не отличается, вот и ошибся здорово оказывается.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #12  
Старый 28.01.2010, 23:24
Аватар для NIch
NIch NIch вне форума
Продвинутый
 
Регистрация: 02.06.2008
Адрес: Бендеры ПМР
Сообщения: 754
Репутация: 2446
По умолчанию

Цитата:
Надо:
Type
TMyRec = record
...
end;
TMyRec1 = record
..
end;
Нужно еще и так
Var
Arr : array of TMyRec;
Arr1 : array of TMyRec1;
Так и сделал, только вне класса...не хочу сломать мозг...и вообще от класса отказался...посмотрим, что получится...
Цитата:
Не забудьте только задать размер массива SetLength(Arr, 10);
Про динамический массив я знаю)))
__________________
В начале был Бит, потом Байт и только потом появилось Слово...
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:34.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter