Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
BambulaA
0 / 0 / 0
Регистрация: 14.07.2013
Сообщений: 22
1

Сообщение при выполнении: "Could not convert variant of type (String) into type (Double)"

02.06.2016, 11:13. Просмотров 774. Ответов 6

При выполнении вылазит эта ошибка. Не пойму в чем проблема. Помогите если кто-то уже сталкивался.
Вот часть кода в котором находит ошибку.
C++
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
void __fastcall TForm2::Timer1Timer(TObject *Sender)
{
static int maxCol = StringGrid1->ColCount-1;  //      Col -  столбцы
static int maxRow = StringGrid1->RowCount-1;  //      Row -  строки
static int minValueI = -1;
static int minValueJ = -1;
for (int i = 0; i < maxRow; i++)
 for (int j = 0; j < maxCol; j++)
 {
 int min = 10;
 if (StringGrid1->Cells[j][StringGrid1->RowCount] == 0 ||
 StringGrid1->Cells[StringGrid1->ColCount][i] == 0)
 {
 continue;
 }
 else if ( (StringGrid1->Cells[j][StringGrid1->RowCount] != 0 &&
 StringGrid1->Cells[StringGrid1->ColCount][i] != 0))
  {
   if (min > StringGrid1->Cells[j][i])
   {
   minValueI = i;
   minValueJ = j;
   }
  }
 }
  if(StringGrid1->Cells[minValueI][maxRow]-StringGrid1->Cells[maxCol][minValueJ] < 0)
   {
   StringGrid2->Cells[minValueJ][minValueI] = StringGrid1->Cells[minValueJ][maxRow];
   StringGrid1->Cells[minValueJ][maxRow] = StringGrid1->Cells[minValueJ][maxRow] - StringGrid1->Cells[minValueJ][maxRow];
   StringGrid1->Cells[maxCol][minValueI] = StringGrid1->Cells[maxCol][minValueI] - StringGrid1->Cells[minValueJ][maxRow];
   }
   else
   {
    StringGrid2->Cells[minValueJ][minValueI] = StringGrid1->Cells[maxCol][minValueI];
    StringGrid1->Cells[maxCol][minValueI] = StringGrid1->Cells[maxCol][minValueI] - StringGrid1->Cells[maxCol][minValueI];
    StringGrid1->Cells[maxCol][minValueI] = StringGrid1->Cells[maxCol][minValueI] - StringGrid1->Cells[minValueJ][maxRow];
 }
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.06.2016, 11:13
Ответы с готовыми решениями:

Could not convert variant of the type (String) into type (Boolean)
Пишу клиент-серверное приложение (pipes), за основу взял пример из msdn...

Could not convert variant of type (Dispatch) into type (Boolean)
Здравствуйте. Компонента webbrowser. Окончание загрузки страницы отслеживал...

Сообщение "type name expected" перед именем функции
Вот текст задачи Описать функцию PosSub(S0, S, K, N) целого типа, возвращающую...

Использование компонентов DICOMVCL - сообщение "Not an allowed type (__property TMetaClass*)"
Всем привет. C++ Builder 6. Установил компоненты DICOMVCL. Открываю demo,...

Ошибка "Type mismatch in redeclaration of" при компиляции программы
Реализую итерационный мгуа и выдает такую ошибку Type mismatch in redeclaration...

6
D1973
Модератор
3474 / 2495 / 1228
Регистрация: 21.01.2014
Сообщений: 10,388
Записей в блоге: 3
Завершенные тесты: 1
02.06.2016, 11:21 2
1. Не может быть в гриде такой ячейки
StringGrid1->Cells[j][StringGrid1->RowCount]
индексация с 0 начинается, поэтому максимум
C++
1
StringGrid1->Cells[j][StringGrid1->RowCount - 1]
2.
Цитата Сообщение от BambulaA Посмотреть сообщение
StringGrid1->Cells[minValueI][maxRow]-StringGrid1->Cells[maxCol][minValueJ] < 0
Как ты лихо с типом String арифметические операции проводишь! Молодец!!!
1
BambulaA
0 / 0 / 0
Регистрация: 14.07.2013
Сообщений: 22
02.06.2016, 11:36  [ТС] 3
Цитата Сообщение от D1973 Посмотреть сообщение
2.
Сообщение от BambulaA
StringGrid1->Cells[minValueI][maxRow]-StringGrid1->Cells[maxCol][minValueJ] < 0
Как ты лихо с типом String арифметические операции проводишь! Молодец!!!
В другой форме такой же код, но на него он не ругается.
Цитата Сообщение от D1973 Посмотреть сообщение
1. Не может быть в гриде такой ячейки
StringGrid1->Cells[j][StringGrid1->RowCount]
индексация с 0 начинается, поэтому максимум
C++Выделить код
1
StringGrid1->Cells[j][StringGrid1->RowCount - 1]
Это исправил, но ошибка осталась..
0
D1973
Модератор
3474 / 2495 / 1228
Регистрация: 21.01.2014
Сообщений: 10,388
Записей в блоге: 3
Завершенные тесты: 1
02.06.2016, 11:43 4
Цитата Сообщение от BambulaA Посмотреть сообщение
но на него он не ругается
А ты вообще не указал, на что он ругается... Это так, что первое в глаза бросилось... Поставь точку останова и пройдись по шагам, укажи точную строку, на которой ошибка выбивается и точное содержание или скрин сообщений отладчика
1
BambulaA
0 / 0 / 0
Регистрация: 14.07.2013
Сообщений: 22
02.06.2016, 11:58  [ТС] 5
Цитата Сообщение от D1973 Посмотреть сообщение
А ты вообще не указал, на что он ругается... Это так, что первое в глаза бросилось... Поставь точку останова и пройдись по шагам, укажи точную строку, на которой ошибка выбивается и точное содержание или скрин сообщений отладчика
Вообщем с брейкпоинтами без ошибок доходит до этой строчки:
C++
1
if(StringGrid1->Cells[minValueI][maxRow]-StringGrid1->Cells[maxCol][minValueJ] == 0)
Она на 24 строке находится.
C++
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
static int maxCol = StringGrid1->ColCount-1;  //      Col -  столбцы
static int maxRow = StringGrid1->RowCount-1;  //      Row -  строки
static int minValueI = -1;
static int minValueJ = -1;
for (int i = 0; i < maxRow; i++)
 for (int j = 0; j < maxCol; j++)
 {
 int min = 10;
 if (StringGrid1->Cells[j][StringGrid1->RowCount - 1] == 0 ||
 StringGrid1->Cells[StringGrid1->ColCount - 1][i] == 0)
 {
 continue;
 }
 else if ( (StringGrid1->Cells[j][StringGrid1->RowCount - 1] != 0 &&
 StringGrid1->Cells[StringGrid1->ColCount - 1][i] != 0))
  {
   if (min > StringGrid1->Cells[j][i])
   {
   minValueI = i;
   minValueJ = j;
   }
  }
 }
 if(StringGrid1->Cells[minValueI][maxRow]-StringGrid1->Cells[maxCol][minValueJ] == 0)
   {
   StringGrid2->Cells[minValueJ][minValueI] = StringGrid1->Cells[minValueJ][maxRow];
   StringGrid1->Cells[minValueJ][maxRow] = StringGrid1->Cells[minValueJ][maxRow] - StringGrid1->Cells[minValueJ][maxRow];
   StringGrid1->Cells[maxCol][minValueI] = StringGrid1->Cells[maxCol][minValueI] - StringGrid1->Cells[minValueJ][maxRow];
   }
   else
   {
    StringGrid2->Cells[minValueJ][minValueI] = StringGrid1->Cells[maxCol][minValueI];
    StringGrid1->Cells[maxCol][minValueI] = StringGrid1->Cells[maxCol][minValueI] - StringGrid1->Cells[maxCol][minValueI];
    StringGrid1->Cells[maxCol][minValueI] = StringGrid1->Cells[maxCol][minValueI] - StringGrid1->Cells[minValueJ][maxRow];
 }
0
D1973
Модератор
3474 / 2495 / 1228
Регистрация: 21.01.2014
Сообщений: 10,388
Записей в блоге: 3
Завершенные тесты: 1
02.06.2016, 12:25 6
Лучший ответ Сообщение было отмечено BambulaA как решение

Решение

Ну вот, собственно, о чем и речь... Сделай так...
C++
1
if(StrToInt(StringGrid1->Cells[minValueI][maxRow]) - StrToInt(StringGrid1->Cells[maxCol][minValueJ]) == 0)
Если же у тебя в ячейках дробные числа, то все плохее... разность двух действительных чисел 0 сроду равна не будет, будет 0,000...0001 но не чистый 0.
1
BambulaA
0 / 0 / 0
Регистрация: 14.07.2013
Сообщений: 22
02.06.2016, 16:30  [ТС] 7
Спасибо большое. Ты мне очень сильно помог))
0
02.06.2016, 16:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.06.2016, 16:30

Ошибка при компиляции под x64: "C++ requires a type specifier for all declarations"
Хочу скомпелировать под 64, создаю тестовый проект (создаю всего одну функцию в...

Ошибка "Type mismatch in redeclaration of" при компиляции примера подключения OpenGL
Хочу создать OpenGL программу, но постоянно какие-то ошибки (например ...

"Type name expected" при приведении типов
Здраствуйте мне нужно привести типы вот в этой функции, void __fastcall...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru