Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 3
Регистрация: 01.01.2018
Сообщений: 165

[Embarcadero C++] Could not convert variant of type (String) into type (Double)

16.02.2022, 09:15. Показов 678. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Не могу понять, где он в этом коде дабл находит?

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
AnsiString getConfig(AnsiString option)
{
    AnsiString trimchar[] = {
    " ", ".", ",", ":", ";", "\\", "|",
    "/", "*", "'", "[", "]", "{", "}",
    "(", ")", "+", "-", "&", "?", "!",
    "^", "%", "$", "#", "№", "<", ">"};
 
  for (int i = 1; i < 50; i++)
        if (cfg[i].Pos(option) > 0)
        {
            AnsiString str = "";
            for (int n = cfg[i].Pos("=")+1; n <= cfg[i].Length(); n++)
                str += cfg[i][n];
            str = str.LowerCase();
            for (int n = 1; n <= str.Length(); n++)
                for (int f = 0; f <= sizeof(trimchar); f++)
                    str = str[n] == trimchar[f] ? str + "" : str + str[n]; // << Ошибка тут
        #if __DEBUG__
            Log(SERVERWINDOW, LEVEL_DEBUG, str);
        #endif
            return str;
        }
  return "";
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.02.2022, 09:15
Ответы с готовыми решениями:

Could not convert variant of type (Null) into type (String)
if(DBLookupComboBoxDoctor-&gt;ListField.IsEmpty()) ...

Сообщение при выполнении: "Could not convert variant of type (String) into type (Double)"
При выполнении вылазит эта ошибка. Не пойму в чем проблема. Помогите если кто-то уже сталкивался. Вот часть кода в котором находит...

Could not convert variant of type (UnicodeString) into type (Double)
Ну вот оно все компилируется но когда выбирает из первой функции все норм делает, а когда второй то вылезает. void __fastcall...

8
2393 / 1920 / 763
Регистрация: 27.07.2012
Сообщений: 5,560
16.02.2022, 09:20
Цитата Сообщение от Blocked Посмотреть сообщение
Code
1
str = str[n] == trimchar[f] ? str + "" : str + str[n]; // << Ошибка тут
Поместите это выражение в скобки: str = (str[n] == trimchar[f] ? str + "" : str + str[n]);

Цитата Сообщение от Blocked Посмотреть сообщение
C++
1
sizeof(trimchar)
Так размер массива не найти. Так надо: sizeof(trimchar) / sizeof(trimchar[0])
0
0 / 0 / 3
Регистрация: 01.01.2018
Сообщений: 165
16.02.2022, 09:24  [ТС]
Все равно ошибку дает.
0
2393 / 1920 / 763
Регистрация: 27.07.2012
Сообщений: 5,560
16.02.2022, 09:25
Тут точно никаких выходов за пределы массивов нет?
0
0 / 0 / 3
Регистрация: 01.01.2018
Сообщений: 165
16.02.2022, 09:41  [ТС]
Вот весь модуль
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
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
//---------------------------------------------------------------------------
 
#pragma hdrstop
 
#include "Config.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
 
int PORT =  4040;
bool
   INFO_LOG     = true,
   DEBUG_LOG    = true,
   ERROR_LOG    = true,
   FILE_LOG     = true,
   WINDOW_LOG   = true,
   AUTOSTART    = false;
 
AnsiString cfg[100];
bool fileloaded = false;
 
 
 
bool checkConfig()
{
    if (!FileExists(CONFIGFILE))
    {
        createConfig();
        fileloaded = false;
        return false;
    }
    else
    {
        TStringList *config = new TStringList();
        config->LoadFromFile(CONFIGFILE);
        for (int i = 1; i < config->Count; i++)
           cfg[i] = config->Strings[i];
        fileloaded = true;
        config->Free();
    }
 
    getConfig("AUTOSTART");
 
    return true;
}
 
AnsiString getConfig(AnsiString option)
{
    AnsiString trimchar[] = {
    " ", ".", ",", ":", ";", "\\", "|",
    "/", "*", "'", "[", "]", "{", "}",
    "(", ")", "+", "-", "&", "?", "!",
    "^", "%", "$", "#", "№", "<", ">"};
 
  for (int i = 1; i < 50; i++)
        if (cfg[i].Pos(option) > 0)
        {
            AnsiString str = "";
            for (int n = cfg[i].Pos("=")+1; n <= cfg[i].Length(); n++)
                str += cfg[i][n];
            str = str.LowerCase();
            for (int n = 1; n <= str.Length(); n++)
                for (int f = 0; f <= sizeof(trimchar) / sizeof(trimchar[0]); f++)
                    str = (str[n] == trimchar[f] ? str + "" : str + str[n]);
        #if __DEBUG__
            Log(SERVERWINDOW, LEVEL_DEBUG, str);
        #endif
            return str;
        }
  return "";
}
 
void createConfig()
{
   TStringList *config = new TStringList();
   config->Add("PORT = "        + IntToStr(PORT));
   config->Add("INFO_LOG = "    + AnsiString(INFO_LOG   ? "TRUE" : "FALSE"));
   config->Add("DEBUG_LOG = "   + AnsiString(DEBUG_LOG  ? "TRUE" : "FALSE"));
   config->Add("ERROR_LOG = "   + AnsiString(ERROR_LOG  ? "TRUE" : "FALSE"));
   config->Add("FILE_LOG = "    + AnsiString(FILE_LOG   ? "TRUE" : "FALSE"));
   config->Add("WINDOW_LOG = "  + AnsiString(WINDOW_LOG ? "TRUE" : "FALSE"));
   config->Add("AUTOSTART = "   + AnsiString(AUTOSTART  ? "TRUE" : "FALSE"));
   config->SaveToFile(CONFIGFILE);
   config->Free();
   checkConfig();
}
Убирая конкретно это условие, все спокойно работает.

Если говорить за выход из диапазона, то возможно тут может быть
C++
1
2
for (int n = cfg[i].Pos("=")+1; n <= cfg[i].Length(); n++)
      str = (str[n] == trimchar[f] ? str + "" : str + str[n]); // при положительном выборе идет сокращение строки за счет замещения символа на пустышку. Но я пустышку менял на пробел и делал обратное чтение строки, результат тот же, он где то находит дабл.
0
2393 / 1920 / 763
Регистрация: 27.07.2012
Сообщений: 5,560
16.02.2022, 09:46
Цитата Сообщение от Blocked Посмотреть сообщение
C++
1
for (int n = 1; n <= str.Length(); n++) /* ... */ str[n] /* .. */
Здесь выход за пределы массива. Последний индекс для str - это str.Length() - 1. В цикле надо было бы n < str.Length(), но это всё равно бы не работало, так как str по ходу цикла меняется, соответственно, меняется длина. Во вложенном цикле та же история с <=.
0
0 / 0 / 3
Регистрация: 01.01.2018
Сообщений: 165
16.02.2022, 10:00  [ТС]
Добавил переменную, чтобы str не форматировать, один фиг ошибка лезет.
C++
1
2
3
for (int n = 1; n < str.Length(); n++)
    for (int f = 0; f < sizeof(trimchar) / sizeof(trimchar[0]); f++)
        strf = (str[n] == trimchar[f] ? strf + "" : strf + str[n]);
0
2393 / 1920 / 763
Регистрация: 27.07.2012
Сообщений: 5,560
16.02.2022, 10:34
Цитата Сообщение от Blocked Посмотреть сообщение
C++
1
AnsiString trimchar[]
Так, только сейчас обратил внимание. AnsiString trimchar[] - это массив AnsiString. AnsiString str = "" - это просто одна AnsiString. А тут str[n] == trimchar[f] сравнивается элемент строки с самой строкой.
1
0 / 0 / 3
Регистрация: 01.01.2018
Сообщений: 165
16.02.2022, 10:41  [ТС]
Сделал так, вроде заработало.
C++
1
    strf = (str[n] == trimchar[f][1] ? strf + "" : strf + str[n]);
Но можно еще и trimchar сделать char массивом char trimchar[] = {'', .... , ''};

Спасибо за наводку.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.02.2022, 10:41
Помогаю со студенческими работами здесь

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

XML Получение данных. Ошибка Could not convert variant of type (Null) into type (OleStr)
Здравствуйте! Пытаюсь загрузить из xml в мемо данные, но выдает ошибку, хотя данные в мемо загружаются. Я пытаюсь разобраться с xml, нужна...

Unable to load project [путь проекта] could not convert variant of type (null) into type (olestr)
Добрый день! при перезагрузке проекта столкнулся проблемой: проект не хочет открываться и выдает ошибку unable to load project could...

При конвертации даты возникает ошибка could not convert variant of type(Null) into type (date)
Добрый день.Помогите пожалуйста. При конвертации даты возникает ошибка could not convert variant of type(Null) into type (date) . ...

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru