1 / 1 / 0
Регистрация: 03.10.2012
Сообщений: 12
1

Необъявленный объявленный идентификатор Memo3

18.07.2013, 00:05. Показов 2163. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пишу программку для проверки орфографии в тексте.
Усовершенствую её по-этапно сверху -вниз. Застрял на последнем этапе.

Суть программы: Три поля Memo и одна Кнопка.
В Memo1 записан исходный текст, в Memo2 появится обработанный, Memo3 содержит словарь.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
unit Tero19;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
 
type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Memo2: TMemo;
    Memo3: TMemo;
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
 
 
  private
    { Private declarations }
 
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
  stroka1, slovo1, slovo_Memo1 : string;
  psr_str_glvn, psr_str1, psr_str2, psr_poisk : string;
 
   // счётчики для циклов
  istina : integer;    // результирующая для процедуры "Поиск"
  procedure Cikl_stroki(stroka1: string; var psr_str_gl :string);
  procedure Poisk(slovo_Memo1: string; var istina: integer);
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
begin
Memo3.Lines.LoadFromFile('Slovar.txt');
end;
 
// Этап 3.
// Сверяю со словарём полученные слова. Возвращаю результат сверки.
procedure Poisk(slovo_Memo1: string; var istina: integer);
var
  i3: Integer;
 
  begin
   istina := 0;    // ноль - означает что подобное слово есть в словаре.
   for i3 := 0 to  Memo3.Lines.Count -1 do
     begin
       psr_poisk := Memo3.Lines[i3] ;
       if slovo_Memo1 = psr_poisk
         then   istina := 0
         else   istina := 1;
 
     end;
 
 end;
 
 
   
 
 
// Этап 2.
// Подготовка очередной строки для расчленения на подстроки(слова)
// для углубления анализа: сверки с базой допустимых слов в языке;
procedure Cikl_stroki(stroka1: string; var psr_str_gl :string);
var
  i2: Integer;
 begin
   psr_str_glvn := '';
   for i2 := 1 to length(stroka1) do
     begin
 
       (*Esli [i]-yj simvol ne raven probelu,to skladyvaem vse bukvy do ocherednogo probela.*)
         (*A inache [esli popalsja simvol ravnyj probelu] delaem nizhe sledujuwee:*)
       if stroka1[i2]<>' '
         then slovo1:= slovo1 + stroka1[i2] // собираем слово из символов по-очерёдно
         else
           begin
             Poisk(slovo1,istina) ; // вызов процедуры сравнения со словарём
             if istina = 0
               then psr_str1 :=  slovo1
               else
                 begin
                   slovo1 := AnsiUpperCase(slovo1); // если слова нет в словаре, то выделя его верхним регистром
                   psr_str1 :=  slovo1;
                 end;
 
             psr_str2 :=  psr_str1 + ' ' ;  // присваиваю пропавший в процессе пробел
             slovo1 := '';
             psr_str_glvn :=  psr_str_glvn + psr_str2; // собираю слова обратно в строку
           end;
 
     end;
 
 end;
 
 // Этап 1.
//  Ввод-вывод строк текста
// + Подготовка очередной строки для задачи Этапа2: вставка пробела в конце строки
procedure TForm1.Button1Click(Sender: TObject);
var
  i1: Integer;
begin
  Memo2.Lines.Clear;
 
 
  for i1 := 0 to Memo1.Lines.Count-1 do
  begin
    if Memo1.Lines[i1]<> ''   // устраняется ошибка выполнения при встречи с абс.пустой строкой
      then
        begin
          stroka1 := Memo1.Lines[i1];
          if stroka1[Length(stroka1)]<>' '
            then   stroka1 := stroka1 + ' ' ;
          Cikl_stroki(stroka1, psr_str_glvn);
          Memo2.Lines.Add(psr_str_glvn);
        end
      else Memo2.Lines.Add(Memo1.Lines[i1]); // устраняется ошибка выполнения при встречи с абс.пустой строкой
 
  end;
end;
 
end.
При попытке откомпилировать программу в Delphi XE4 пишет:
[dcc32 Error] Tero19.pas(51): E2003 Undeclared identifier: 'Memo3' - Необъявленный идентификатор: 'Memo3'
в ответ на строку "for i3 := 0 to Memo3.Lines.Count -1 do"

То есть в процедуре procedure Poisk(slovo_Memo1: string; var istina: integer); поле Memo3 комилятор считает не объявленным.

Пробовал в процедуре procedure TForm1.Button1Click(Sender: TObject); что-либо делать с полем Memo3.
Там всё нормально. Компилятор считает данное поле - объявленным.

Пробывал объявить Memo3 ещё где-нибудь. Но компилятор ругаться начинает:
[dcc32 Error] Tero19.pas(18): E2065 Unsatisfied forward or external declaration: 'TForm1.Poisk' - Неудовлетворительная пересылка или внешнее объявление: 'TForm1.Poisk'


Вопрос: Чего делать то?
Как до компилирования нормальный по логике код программы довести?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.07.2013, 00:05
Ответы с готовыми решениями:

Необъявленный идентификатор
Доброго времени суток, форумчане. Учусь на 2 курсе на факультете программирования. Было дано...

Необъявленный идентификатор в процедуре
Добрый вечер, господа. В Public'е объявил переменную dayc как Integer. Когда обращаюсь к этой...

Необъявленный идентификатор: 'smemo1'
Всем привет! Вот код программы: unit Unit1; interface uses Windows, Messages,...

Ошибка E2003 (Необъявленный идентификатор: 'null')
Ругалось на null в этой строке: if s &lt;&gt; null then Погуглил, гугл сказал, что это из библиотеки...

11
angstrom
18.07.2013, 00:10 2
Перенести процедуру Poisk в раздел public формы или явно указывать Form1.Memo3.
1074 / 987 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
18.07.2013, 00:11 3
Упс.
0
134 / 133 / 22
Регистрация: 29.08.2012
Сообщений: 353
18.07.2013, 00:12 4
Цитата Сообщение от mpeg Посмотреть сообщение
поле Memo3 комилятор считает не объявленным.
он вашу процедуру не считает методом класса TForm1, поэтому не позволяет ей взаимодействовать напрямую с элементами класа, либо процедуры выше опишите(private|public) либо обращайтесь к компаненту через класс(Form1.memo3)
1
пофигист широкого профиля
4732 / 3167 / 858
Регистрация: 15.07.2013
Сообщений: 18,248
18.07.2013, 00:31 5
Регулярная процедура ничего не знает и знать не может ни о форме, ни о её методах и свойствах. Ну и также о компонентах, которые на эту форму бросили.

Добавлено через 18 минут
Если эта процедура не должна быть привязана к конкретной форме, то ссылку на Мемо нужно передавать в неё параметром:
Код
procedure Poisk(slovo_Memo1: string; Memo: TMemo; var istina: integer);
1
angstrom
18.07.2013, 00:36 6
Цитата Сообщение от northener Посмотреть сообщение
то ссылку на Мемо нужно передавать в неё параметром
И зачем так делать?
пофигист широкого профиля
4732 / 3167 / 858
Регистрация: 15.07.2013
Сообщений: 18,248
18.07.2013, 00:50 7
Цитата Сообщение от angstrom Посмотреть сообщение
И зачем так делать?
А что не понятно?
0
1 / 1 / 0
Регистрация: 03.10.2012
Сообщений: 12
18.07.2013, 00:55  [ТС] 8
Спасибо огромное.

записал вот так
for i3 := 0 to Form1.Memo3.Lines.Count -1 do
и закончил ещё один этап шлифования своей первой программы.

он вашу процедуру не считает методом класса TForm1, поэтому не позволяет ей взаимодействовать напрямую с элементами класа
А где и у кого можно почитать подробнее об этом?
Чтобы в памяти отложилось на будущее...
Или ... Какие слова в поисковик забить чтобы найти что-либо о подобной ошибке почитать?
0
пофигист широкого профиля
4732 / 3167 / 858
Регистрация: 15.07.2013
Сообщений: 18,248
18.07.2013, 00:57 9
Приведу объявление предложенной мною процедуры несколько иначе:
Код
procedure Poisk(slovo_Memo1: string; FindIn: TStings; var istina: integer);
Так понятнее?
0
angstrom
18.07.2013, 00:57 10
Цитата Сообщение от northener Посмотреть сообщение
А что не понятно?
А то, что так имеет смысл делать, когда в процедуру могут передаваться разные Memo. У ТС явно поставленная задача, работать с конкретным Memo.
пофигист широкого профиля
4732 / 3167 / 858
Регистрация: 15.07.2013
Сообщений: 18,248
18.07.2013, 01:18 11
Цитата Сообщение от angstrom Посмотреть сообщение
А то, что так имеет смысл делать, когда в процедуру могут передаваться разные Memo. У ТС явно поставленная задача, работать с конкретным Memo.
Во-первых по словам ТС это его первая программа. И возможно не последняя. Во-вторых (судя по комментариям в коде) у ТС задача не столько работать с "конкретным Мемо", сколько с неким "словарем". Так что мой совет ему на будущее.
0
angstrom
18.07.2013, 01:23     Необъявленный объявленный идентификатор Memo3
  #12

Не по теме:

На будущее:

«Не следует множить сущее без необходимости» - Бритва Оккама.

IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.07.2013, 01:23

О чем говорит ошибка "Необъявленный идентификатор"
Delphi 7, как исправить?

Исправить ошибку "Необъявленный идентификатор"
ЧТО ЗДЕСЬ НЕ ТАК, УМОЛЯЮ unit Unit1; interface uses Windows, Messages, SysUtils,...

memo1+memo2=>memo3
На форме лежит 3 мемо. memo1: Источник1 Источник2 Источник3 Источник4 ... memo2:

не объявленный идентификатор
undeсlared identfier bm: bookmark procedure TForm2.N11Click(Sender: TObject); VAR xl:variant;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru