1

Тема: Помилка при компіляції. В порівнянні масив з типом AnsiString

C++Builder 6
При компіляціїї виходить помилка

[C++ Error] DBComparisonOne.cpp(278): E2288 Pointer to structure required on left side of -> or ->*

if(PoleStructurW[0][zzz]->Length() == 0)

2

Re: Помилка при компіляції. В порівнянні масив з типом AnsiString

Розібрався

if(PoleStructurW[0][zzz].Length() == 0)

3 Востаннє редагувалося avpdnepr (27.08.2015 19:11:47)

Re: Помилка при компіляції. В порівнянні масив з типом AnsiString

Но як покав запуск програми, це не дуже допомогло.

Може хтось підкаже, чому не спрацював break коли значення стало NULL

for(int zzz = 0; zzz < 300; zzz++)
              {
                  if(PoleStructur[0][z] == PoleStructurW[0][zzz])
                  {
                       pole = 1;
                  }
                  if(zzz = 299 && PoleStructur[0][z] != PoleStructurW[0][zzz] && pole == 0)
                  {
                       MemoE->Lines->Add(PoleStructur[0][z]);
                       Memo1E->Lines->Add(PoleStructurW[0][zzz]);
                  }

                 if(PoleStructurW[0][zzz].IsEmpty)
                  {
                      break;
                  }
              }

4

Re: Помилка при компіляції. В порівнянні масив з типом AnsiString

Щось я не зрозумів коли у вас IsEmpty набуває значення true.

5

Re: Помилка при компіляції. В порівнянні масив з типом AnsiString

Я вже зрозумів що isEmpty перевіряє масив, а не значення у полі. Добре, тоді як мені перевірити окреме значення у масиві на NULL

6

Re: Помилка при компіляції. В порівнянні масив з типом AnsiString

Arete написав:

Щось я не зрозумів коли у вас IsEmpty набуває значення true.

Я вже зрозумів що isEmpty перевіряє масив, а не значення у полі. Добре, тоді як мені перевірити окреме значення у масиві на NULL

7

Re: Помилка при компіляції. В порівнянні масив з типом AnsiString

Я використовую тип AnsiString

8

Re: Помилка при компіляції. В порівнянні масив з типом AnsiString

Дуже великий код, мені не дуже хотілось би для змінних назначати тип TField

9

Re: Помилка при компіляції. В порівнянні масив з типом AnsiString

Я знайшов метод data() та c_str() але вони чомусь теж не працюють

for(int zzz = 0; zzz < 300; zzz++)
              {
                  if(PoleStructur[0][z] == PoleStructurW[0][zzz])
                  {
                       pole = 1;
                  }
                  if(zzz = 299 && PoleStructur[0][z] != PoleStructurW[0][zzz] && pole == 0)
                  {
                       MemoE->Lines->Add(PoleStructur[0][z]);
                       Memo1E->Lines->Add(PoleStructurW[0][zzz]);
                  }
 
                 if(PoleStructurW[0][zzz].c_str()  == "")
                  {
                      break;
                  }
              }

10 Востаннє редагувалося avpdnepr (28.08.2015 09:15:06)

Re: Помилка при компіляції. В порівнянні масив з типом AnsiString

Розібрався, чомусь в C++Builder 6 якщо є три циклу. Кожний вкладений в попередній, то програма зависає. Може хтось підкаже як з цим боротися

11 Востаннє редагувалося koala (28.08.2015 10:47:59)

Re: Помилка при компіляції. В порівнянні масив з типом AnsiString

Відкрию секрет: тут немає телепатів. Ніхто не знає, що таке є ваші PoleStructur та PoleStructurW, і ми тільки здогадуємося, який тип в z, pole, MemoE та Memo1E; тим більше, ми не знаємо, як саме ви хочете, щоб воно працювало, а без цього дуже важко щось радити.
Але що точно можна сказати - це те, що:
- (рядок 7) zzz = 299 - не порівняння, а присвоювання;
- (рядок 13) порівнювати стрічки стилю C (0-терміновані масиви символів) знаком == можна тільки тоді, коли вам треба переконатися, що вони знаходяться в одному місці в пам'яті, а не що в них однаковий вміст; якщо у вас все в AnsiString/WideString, то треба їх порівнювати, а не C-стрічки. Перший варіант був майже правильний, IsEmpty - функція.