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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.07.2011, 12:26   #1
BlackStoens
Новичок
Джуниор
 
Аватар для BlackStoens
 
Регистрация: 08.07.2011
Сообщений: 8
Вопрос В экземпляре объекта не задана ссылка на объект

Компиляция проходит нормально.
Однако при запуске программы выдаёт ошибку: в экземпляре объекта не задана ссылка на объект.
С такой ошибкой сталкиваюсь впервые. Искала насчёт неё в интернете, но нашла только когда такая ошибка возникает в C++. Я такой язык ещё не знаю, так что трудно понять в чём именно у людей возникает ошибка в программе.

Программа написана в ABC Pascal

PHP код:
program Stek;
 
uses crtmodst;
 
var 
j,xinteger;
    
ftext;
    
filename,filename1string;
    
MStekTStek;
 
begin
   clrscr
;
   
MStek.Init; { ошибку выдаёт здесь }
   
assign(f,'input.txt');
   
reset(f);
   ...
end
Вот сама процедура(реализована в модуле):

PHP код:
procedure TStek.Init;

var 
i,k,Ninteger;

begin
   k
:=4;
   
N:=10;
   
SetLength(mas1,N-1);
   
SetLength(mas2,N-1);
   
SetLength(mas3,N-1);
   for 
i:=0 to N-do mas1[i]:=0;
   for 
i:=0 to N-do mas2[i]:=0;
   for 
i:=0 to N-do mas3[i]:=0;
   
mas3[k+1]:=1;
   for 
i:=1 to N-do mas2[i]:=i+1;
   
mas2[N]:=0;
end

Последний раз редактировалось BlackStoens; 08.07.2011 в 12:31.
BlackStoens вне форума Ответить с цитированием
Старый 08.07.2011, 13:17   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Вы сразу обращаетесь TStek не создав его. Это все равно что попытаться покормить ребенка не родив его перед этим. Если объесться грибов то это возможно (поэтому компилятор и не ругается), но на практике как-то не получается...
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 08.07.2011, 13:43   #3
Wicort
Форумчанин
 
Аватар для Wicort
 
Регистрация: 04.08.2009
Сообщений: 684
По умолчанию

Лишь немного уточню то, что написал Utkin.
Строчкой
Код:
var MStek: TStek;
Вы всего навсего объявляете, что переменная MStek у вас будет иметь тип TStek.
Но при этом объект Вы не создаете.
Для того, чтобы создать объект нужно написать
Код:
MStek := TStek.Create
Лишь после этого можно обращаться к объекту.
Еслия Вам помог, не поленитесь нажать на весы и оставить отзыв. Это не займет много времени, но даст понять, что я старался не зря =)
Мой ник зарегистрирован, а твой?
Wicort вне форума Ответить с цитированием
Старый 08.07.2011, 13:50   #4
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Utkin, Wicort, не факт. Если это паскалевский объект, то всё так и должно быть, главное не забыть в модуле этот объект занести в интерфейсную часть, а методы в implementation

BlackStoens, показывай как объявлен TStec и что это вообще такое (с АВС не работал, но могу предположить, что он и с классами может работать)
eoln вне форума Ответить с цитированием
Старый 08.07.2011, 13:57   #5
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Сообщение от eoln Посмотреть сообщение
Utkin, Wicort, не факт. Если это паскалевский объект, то всё так и должно быть, главное не забыть в модуле этот объект занести в интерфейсную часть, а методы в implementation

BlackStoens, показывай как объявлен TStec и что это вообще такое (с АВС не работал, но могу предположить, что он и с классами может работать)
Может и не факт, но паскалевский объект с вероятностью в 90% назывался бы TStack... В любом случае проверить стоит.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 08.07.2011, 14:09   #6
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Почему? Его хоть как можно назвать, это от фантазии зависит. Просто в стандартном паскале классов нет, а объекты создаются просто через var
Код:
var MyObject = object
  ...
end;
var 
  obj1: MyObject;
begin
  //тут уже можно работать с объектом obj1, так как он уже создан
end.
eoln вне форума Ответить с цитированием
Старый 08.07.2011, 14:13   #7
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Давайте подождем ТС . Что-то мне подсказывает, что если он готовил своих кошек по Вашему рецепту, то такой ошибки бы у него не возникло...
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 08.07.2011, 14:18   #8
BlackStoens
Новичок
Джуниор
 
Аватар для BlackStoens
 
Регистрация: 08.07.2011
Сообщений: 8
По умолчанию

PHP код:
MStek:=TStek.Create
Вот эту строку я добавляла. Но при этом при запуске программы также выдаёт ошибку, что индекс находился все границ в массива (строка 36 в модуле), а также показывает, что ошибка в основной программе остаётся.

Вот сам объект. Он немного большой.

PHP код:
Unit modst;

interface

type
   TStek 
= class

   private
     
kNinteger;
     
mas1mas2mas3: array of integer;

   public
     
constructor create
     function 
Numberofsteksinteger
     
procedure Add(l,xinteger); {добавление пустой ячейки в стеки мультстека}
     function 
Top(iinteger): integer; {просмотр вершины мультистека }
     
procedure Push(iinteger); {добавление элемента в вершину мультистека}
     function 
Is_Empty(iinteger): boolean; {проверка на пустоту}
     function 
Is_Fullboolean; {проверка на заполненность}
     
procedure Print;
   
end;

implementation


constructor TStek
.create;

var 
i,k,Ninteger;

begin
   k
:=4;
   
N:=10;
   
SetLength(mas1,N-1);
   
SetLength(mas2,N-1);
   
SetLength(mas3,N-1);
   for 
i:=0 to N-do mas1[i]:=0;
   for 
i:=0 to N-do mas2[i]:=0;
   for 
i:=0 to N-do mas3[i]:=0;
   
mas3[k+1]:=1;
   for 
i:=1 to N-do mas2[i]:=i+1;
   
mas2[N-1]:=0;
end;


function 
TStek.Numberofsteksinteger;

begin
   numberofsteks
:=k;
end;


procedure TStek.Add(l,xinteger);

var 
tmp,tmp1,iinteger;
    
tmmas1tmmas2tmmas3: array of integer;
begin
   
if is_full then
   begin
      SetLength
(tmmas1,N);
      
SetLength(tmmas2,N);
      
SetLength(tmmas3,N);
      for 
i:=0 to N do
      
begin
         tmmas1
[i]:=mas1[i];
         
tmmas2[i]:=mas2[i];
         
tmmas3[i]:=mas3[i];
      
end;
      
SetLength(mas1,N);
      
SetLength(mas2,N);
      
SetLength(mas3,N);
      
N:=N+1;
      
SetLength(mas1,N);
      
SetLength(mas2,N);
      
SetLength(mas3,N);
      for 
i:=0 to N-do
      
begin
         mas1
[i]:=tmmas1[i];
         
mas2[i]:=tmmas2[i];
         
mas3[i]:=tmmas3[i];
      
end;
      
SetLength(tmmas1,N);
      
SetLength(tmmas2,N);
      
SetLength(tmmas3,N);
      
mas3[k+1]:=N;
      
mas2[N]:=0;
   
end;
   
mas1[mas3[k+1]]:=x;
   
tmp:= mas3[l];
   
tmp1:=mas3[k+1];
   
mas3[k+1]:=mas2[mas3[k+1]];
   
mas3[l]:=tmp1;
   
mas2[mas3[l]]:=tmp;
end;


function 
TStek.Top(iinteger): integer;

begin
   top
:=mas1[mas3[i]];
end;


procedure TStek.Push(iinteger);

var 
tmpinteger;

begin
   mas1
[mas3[i]]:=0;
   
tmp:= mas2[mas3[i]];
   
mas2[mas3[i]]:=mas3[k+1];
   
mas3[k+1]:=mas3[i];
   
mas3[i]:=tmp;
end;


function 
TStek.Is_Empty(iinteger): boolean;

begin
   
if (mas3[i]=0then Is_Empty:=true
      
else Is_Empty:=false;
end;


function 
TStek.Is_Fullboolean;

begin
   
if (mas3[k+1]=0then Is_Full:=true
      
else Is_Full:=false;
end;

procedure TStek.Print;

var 
jinteger;

begin
   
for j:=1 to N do write(mas1[j],'  ');
   
writeln;
   for 
j:=1 to N do write(mas2[j],'  ');
   
writeln;
   for 
j:=1 to N do write(mas3[j],'  ');
   
writeln;
   
writeln;
   
writeln;
end;


end
Вот основная программа:

PHP код:
program Stek;

uses crtmodst;

var 
j,xinteger;
    
ftext;
    
filename,filename1string;
    
MStekTStek;

begin
   clrscr
;
   
MStek:=TStek.Create; {ошибка здесь}
   
assign(f,'input.txt'); 
   
reset(f);
   while 
not Eof(f) do
   
begin
      
for j:=1 to MStek.Numberofsteks do
        if 
not Eof(fthen
        begin
           read
(f,x);
           
MStek.Add(j,x)
        
end;
   
end;
   
close(f);
   for 
j:=1 to MStek.Numberofsteks do
   
begin
      str
(j,filename1);
      
filename:='OUTPUT'+filename1;
      
assign(f,filename);
      
rewrite(f);
      while (
MStek.Is_Empty(j)<>true) do
      
begin
         writeln
(f,MStek.Top(j));
         
MStek.Push(j);
      
end;
      
close(f);
   
end;
   
readln;
   
readln;
end
BlackStoens вне форума Ответить с цитированием
Старый 08.07.2011, 14:19   #9
BlackStoens
Новичок
Джуниор
 
Аватар для BlackStoens
 
Регистрация: 08.07.2011
Сообщений: 8
По умолчанию

А, и вообще программа считывает из исходно файла данные, добавляет их поочерёдно в стеки мультистека и уже потом эти данные, взятые из мультистека, записывает в выходные файлы.
BlackStoens вне форума Ответить с цитированием
Старый 08.07.2011, 14:29   #10
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Ну вот eoln (здесь режиссер предполагает тяжелый вздох)... Класс чистой воды.

Цитата:
Вот эту строку я добавляла. Но при этом при запуске программы также выдаёт ошибку, что индекс находился все границ в массива (строка 36 в модуле), а также показывает, что ошибка в основной программе остаётся.
Вообще-то правильно он говорит.
Код:
SetLength(mas1,N-1);
Вы создаете 9 ячеек в массиве, а обращаетесь к 10-ти. Я бы на месте Паскаля вообще бы обиделся - таких строк у Вас минимум 3.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
javascript ссылка на объект hotcooler17 JavaScript, Ajax 0 08.04.2011 22:55
Ссылка на экземпляр объекта не установлена. vedro-compota Общие вопросы .NET 2 08.01.2011 17:12
Ссылка на объект у узла TreeView Sanprof Общие вопросы C/C++ 0 25.11.2010 13:42
В экземпляре объекта не задана ссылка на объект. Что не так? oleeg Общие вопросы .NET 0 08.03.2010 20:23
В экземпляре объекта не задана ссылка на объект. Selebro Общие вопросы C/C++ 1 01.12.2008 22:48