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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.03.2013, 15:33   #1
Heng
Форумчанин
 
Регистрация: 27.02.2012
Сообщений: 117
По умолчанию О.О.П

Создал класс в отдельном модуле, но при обращении к нему из основного модуля вылезают какието ошибки, в чем дело ??

Созданный класс
Код:
unit CheckCom;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, ExtCtrls;

type
  TcheckCom = class
    s:string;
    v:Boolean;
    w,w1:integer;

    procedure getOpen(var s:string;var v:Boolean; var w:Integer);
    procedure getClose(var s:string;var v:Boolean;var w1:Integer);
    procedure DelCom(var s:string;var v:Boolean;var w,w1:integer);
    constructor Create(newS:string; newV:Boolean;newW,newW1:integer);
  end;

implementation
uses Unit1;

{ checkCom }

constructor TcheckCom.Create(newS: string; newV: Boolean; newW,
  newW1: integer);
begin
  s:=news;
  v:=newv;
  w:=neww;
  w1:=neww1;
end;

procedure TcheckCom.DelCom(var s: string; var v: Boolean; var w,
  w1: integer);
begin
  delete(s,pos('//',s),Length(s)-1);
   if (w=0) and (w1=0) and (v=true) then
  Delete(s,1,Length(s));
       w:=0;w1:=0;
end;

procedure TcheckCom.getClose(var s: string; var v: Boolean;
  var w1: Integer);
  var i:Integer;
begin
 for i:=1 to Length(s) do
  if s[i] = '}' then begin v:=false; w1:=w1+1;
   delete(s,1,pos('}',s));
   end;
end;

procedure TcheckCom.getOpen(var s: string; var v: Boolean; var w: Integer);
var i:Integer;
begin
 for i:=1 to Length(s) do
  if s[i] = '{' then begin v:=true; w:=w+1;
  delete(s,pos('{',s),length(s)-1);
  end;
end;

end.
Основной модуль
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
i,j,x,y,n,q:integer;
p:integer;
s1,s2:string;
w,w1:integer;   // Ïåðåìåííûå äëÿ ðàáîòû â êîììåíòàðèÿõ
v:boolean;   // Ïåðåìåííûå äëÿ ðàáîòû â êîììåíòàðèÿõ
Comm:TcheckCom;



begin
x:=0; y:=0; n:=2;
                       // Îò÷èùàåì íàøó òàáëèöó
for i:=0 to sg1.ColCount - 1 do
 for j:=1 to sg1.RowCount - 1 do sg1.Cells[i,j]:='';
                                                     Label3.Caption:='';
 Comm.Create('',False,0,0);//w:=0; w1:=0; v:=false; //Óñòàíàâëèâàåì íà÷àëüíûå çíà÷åíèÿ ïðîâåðêè íà êîììåíòàðèè
 while x < memo1.Lines.Count do begin

  s1:='';
  s:=Memo1.Lines[x];             //Áåðåì ïî îäíîé ñòðîêå
  sg1.Cells[0,y+1]:=inttostr(x+1);    // çàïèñûâàåì íîìåð ñòðîêè â òàáëèöó
  s:=s+' ';
  Comm.s:=s;
                                 // Óäàëÿåì êîìåíòàðèè
   {getOpen;  //Íà÷àëî ìíîãîñòðî÷íîãî êîìåíòàðèÿ
   getClose; //Êîíåö ìíîãîñòðî÷íîãî êîìåíòàðèÿ
   DelCom;}

  Comm.getOpen(s,comm.v,comm.w);
 end;
end;
Heng вне форума Ответить с цитированием
Старый 10.03.2013, 16:01   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

создавать нужно так:
Код:
  Comm := TcheckCom.Create('',False,0,0);
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.03.2013, 16:04   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
какието ошибки
Если не перечислишь их то тебе дадут "какоето" решение.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.03.2013, 17:24   #4
Heng
Форумчанин
 
Регистрация: 27.02.2012
Сообщений: 117
По умолчанию

Comm.getOpen(comm.s,comm.v,comm.w); в этой строке после Comm. не показывается список полей и методов.

Последний раз редактировалось Heng; 10.03.2013 в 17:30.
Heng вне форума Ответить с цитированием
Старый 10.03.2013, 17:25   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Heng - внимание на 2 пост в этой теме
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 10.03.2013, 17:27   #6
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
пишет [Warning] Unit1.pas(201): Variable 'Comm' might not have been initialized
Это не ошибка, это предупреждение. Которое, кстати, игнорировать не стоит, ибо гласит сие: "Переменная comm может быть неинициализирована." Имеется в виду, неинициализированна, когда исполнение кода дойдет до строчки 201, где она и вызывается. В таком случае уже во время выполнения вылезет какая-нибудь рантаймовая ошибка доступа к памяти...

В Вашем случае она 100% будет неинициализирована. Исправляется правильным кодом из поста Сержа (№2 в этой ветке)
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 10.03.2013, 17:46   #7
Heng
Форумчанин
 
Регистрация: 27.02.2012
Сообщений: 117
По умолчанию

Comm.getOpen(comm.s,comm.v,comm.w); в этой строке после Comm. не показывается список полей и методов.

про вот это кто-нибуть может пояснить ???
Heng вне форума Ответить с цитированием
Старый 10.03.2013, 18:09   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Я не знаю, как в Дельфи, но в С++ все поля по умолчанию Private.
Напишите:
Код:
type
  TcheckCom = class
  private:
    s:string;
    v:Boolean;
    w,w1:integer;
  public:
    procedure getOpen(var s:string;var v:Boolean; var w:Integer);
    procedure getClose(var s:string;var v:Boolean;var w1:Integer);
    procedure DelCom(var s:string;var v:Boolean;var w,w1:integer);
    constructor Create(newS:string; newV:Boolean;newW,newW1:integer);
  end;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 10.03.2013, 19:19   #9
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Я не знаю, как в Дельфи, но в С++ все поля по умолчанию Private.
Напишите:
Код:
type
  TcheckCom = class
  private:
    s:string;
    v:Boolean;
    w,w1:integer;
  public:
    procedure getOpen(var s:string;var v:Boolean; var w:Integer);
    procedure getClose(var s:string;var v:Boolean;var w1:Integer);
    procedure DelCom(var s:string;var v:Boolean;var w,w1:integer);
    constructor Create(newS:string; newV:Boolean;newW,newW1:integer);
  end;
Так у нас же обращение к полям и методам происходит в рамках одного и того же объекта. Или я что-то не понимаю?
Вадим Мошев вне форума Ответить с цитированием
Старый 10.03.2013, 19:39   #10
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Вадим Мошев, как я понял, ошибка возникает (как и должно быть) в procedure TForm1.Button1Click.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


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