Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.04.2007, 12:34   #11
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

как же вы массиву присваиваете значение элемента
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 06.04.2007, 14:05   #12
mrandrey
Форумчанин
 
Регистрация: 30.03.2007
Сообщений: 124
По умолчанию

согласен, но динамический массив по структуре похож на тип PChar (если я не ошибаюсь), где указатель на тип, совпадает с указателем на первый элемент.

и второе: что мне делать если по другому не получаеться
Тут без 100г не розберешся.....
Спасибо не нужно, а на весы слева кликнуть не помешает!!!
mrandrey вне форума Ответить с цитированием
Старый 11.04.2007, 12:06   #13
Voland
Heavy metal
Пользователь
 
Аватар для Voland
 
Регистрация: 02.04.2007
Сообщений: 42
По умолчанию

Кажется понял. У тебя наверное тип массива объявлен в обоих модулях отдельно. Поэтому компилятор считает что они несовместимы, даже если они объявлены одинаково.
Вот так:
Код:
unit Unit1;

interface

type MyArray = array of <something>;
...

var a: MyArray;
...
Код:
unit Unit2;

interface

uses Unit1;

type MyArray = array of <something>;

var b: MyArray;

...

компилятор считает, что
Unit1.a - типа Unit1.MyArray
Unit2.b - типа Unit2.MyArray, то есть несовместимы
Сделай так, чтобы тип объявлялся только в одном модуле, а другой его использовал.
Voland вне форума Ответить с цитированием
Старый 11.04.2007, 12:25   #14
mrandrey
Форумчанин
 
Регистрация: 30.03.2007
Сообщений: 124
По умолчанию

Unit 1;
type
onedat=record
id,All,last,min,ends:integer;
f:boolean;
str:TStrings;
end;
......
game:array of onedat;



Unit 2;
.....
procedure TForm.Button4Click(Sender: TObject);
fix:array of onedat;
....

Вроди бы все нормально, тип onedat обьявлен только в Unit1, а в чем проблема я не пойму.

Но работать я ее заставил
game:=fix;-так не проходит
game:=@fix[0]; - так работает нормально

кому интерестно в чем была проблема:
некоторые записи в fix присваивались с game в том числе и str:tstrings
а некоторые создавались новые

затем масив память массива game полностю очищалась и
game:=@fix[0];

ошибка возникала потому что str:tstrings тоже удалялись и оставались лишь указатели на них.
Тут без 100г не розберешся.....
Спасибо не нужно, а на весы слева кликнуть не помешает!!!
mrandrey вне форума Ответить с цитированием
Старый 11.04.2007, 15:14   #15
Voland
Heavy metal
Пользователь
 
Аватар для Voland
 
Регистрация: 02.04.2007
Сообщений: 42
По умолчанию

С onedat - всё верно. Но надо ещё массив этих onedat-ов объявить как тип. Тогда всё будет пучком. Выкинь к чертям своё "game:=@fix[0];" и сделай так:
Код:
Unit 1;

interface

type
  OneDat = record
    id, All, last, min, ends: Integer;
    f: Boolean;
    str: TStrings;
  end;
  OneDatArray = array of OneDat;

...

var Game: OneDatArray;

...
Код:
unit Unit2;

...

implementation

uses Unit1;

...

procedure TForm.Button4Click(Sender: TObject);
var fix: OneDatArray;
begin
  Game:=fix; //всё покатит
...
И ещё насчёт TStrings. Нельзя создавать его экземпляр - это абстрактный класс (насколько я помню). Надо использовать TStringList.
Voland вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Pascal масивы Devikss Помощь студентам 2 19.06.2008 17:20
динамические строки SeregaPIF Общие вопросы C/C++ 1 19.11.2007 08:20
Динамические объекты 095 Общие вопросы Delphi 1 04.10.2007 21:16