Longobard
написал 6 августа 2004 года в 10:57 (912 просмотра)
Ведет себя
как мужчина; открыл 291 тему в форуме, оставил 2499 комментариев на сайте.
Сегоня нашел баг в классе конфиге (не парсер а обьект конфига именно моей проги). Итак есть такая вот лабудень (сократил я ее для упрощения вашей мыслительной деятельности):
void
FL_Config::HandleVhostOpts( list < struct element > * tree, struct VhostOpts * vhost )
{
string tag, arg;
const int RequiredParamsNum = 2, OptionalParamsNum = 2;
struct ParamPairs
{
string param;
void * OutPointer;
}
RequiredParams[RequiredParamsNum] =
{
{ FL_VHOST_ROOT, & vhost->VhostRoot },
{ FL_VHOST_DOC_ROOT, & vhost->VhostDocRoot }
},
OptionalParams[OptionalParamsNum] =
{
{ FL_VHOST_ILIMIT, & vhost->InputLimit },
{ FL_VHOST_OLIMIT, & vhost->OutputLimit }
};
while ( !tree->empty() )
{
list < struct element >::reference ref = tree->front();
tag = ref.tag;
arg = ref.arg;
for ( int i = 0; i < RequiredParamsNum; i++ )
{
if ( tag == RequiredParams[i].param )
{
//Воть где-та тут трабла!
if ( ((string*) RequiredParams[i].OutPointer )->length() <= 0 )
*((string*) ( RequiredParams[i].OutPointer )) = arg;
else
{
cerr << *( (string*)( RequiredParams[i].OutPointer )) << " may be set only once!\n";
HasErrors = true;
}
}
}
for ( int i = 0; i < OptionalParamsNum; i++ )
{
if ( tag == OptionalParams[i].param )
{
if ( ((string*)( OptionalParams[i].OutPointer ))->length() <= 0 ) {
* ((string*)( OptionalParams[i].OutPointer )) = arg;
}
else
{
cerr << * ((string*)( OptionalParams[i].OutPointer )) << " may be set only once!\n";
HasErrors = true;
}
}
}
tree->pop_front();
}
for ( int i = 0; i < RequiredParamsNum; i++ )
if ( ((string*) RequiredParams[i].OutPointer )->length() <= 0)
{
cerr << * ((string*) ( RequiredParams[i].OutPointer )) << " must be set!\n";
HasErrors = true;
}
}
Короче мне нада получить доступ к обьекту RequiredParams.OutPointer. Дело в том что часть этих обьектов — string, часть — обьекты других классов, поентому он имеет тип void*. Вопщема у меня строка *( (string*)( RequiredParams.OutPointer )) вместо нужного элемента (которые является строкой, опеределенной в хидере через #define) содержит пустую строку. Короче че-та я намудрил с указателями и преобразованиями :) Помогите плз :)
Последние комментарии
-
OlegL, 17 декабря 2023 года в 15:00 →
Перекличка
21
-
REDkiy, 8 июня 2023 года в 9:09 →
Как «замокать» файл для юниттеста в Python?
2
-
fhunter, 29 ноября 2022 года в 2:09 →
Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt?
6
-
Иванн, 9 апреля 2022 года в 8:31 →
Ассоциация РАСПО провела первое учредительное собрание
1
-
Kiri11.ADV1, 7 марта 2021 года в 12:01 →
Логи catalina.out в TomCat 9 в формате JSON
1
DevOps as a Service from Palark
24/7 SRE & DevOps service to cover all your Kubernetes needs.

Ой короче меня проглючило, нифига я не намудрил, просто перепутал поля структуры и дефайны блин :) Короче тема снята :) Пойду ка я посплю чутка….