У меня есть эта проблема с одной из моих функций в этой программе на C++, которую я переношу с HP-UX на LINUX. В принципе, то, что, как представляется, проблема заключается в том, что для функцииНевозможно передать объекты типа `const DictionaryKey 'через` ...'
const char * Dictionary::lookup(const DictionaryKey &, ...)
ССАГПЗ компилятор, кажется, жаловаться, что я не могу передать объекты типа сопзЬ словарь через ...
Исходный код программы довольно старый и выглядит так, чтобы использовать множество конструкций в стиле С. Эта конкретная функция принимает переменную список аргументов, разрешенных через заголовок stdarg.h. Кроме того, предупреждение сообщается только в gcc (версия 2.95.2) для HP-UX, а не в gcc (версия 4.3.2) LINUX.
$ gcc -lstdc++ foo1.cc foo2.cc
foo1.cc: In method `const char * Dictionary::lookup(const DictionaryKey &, ...)':
foo1.cc:178: warning: cannot pass objects of type `const DictionaryKey' through `...'
Исходный код для функции доступны ниже:
const char *Dictionary::lookup (const DictionaryKey& key, ...)
{
static char res[MAX_LINE];
char *param[9];
va_list ap;
WordDictionary::iterator entry = dictionary.find (key);
if (entry != dictionary.end())
{
int idx = 1;
va_start (ap, key);
while ((param[idx] = va_arg (ap, char *)) != NULL) idx++;
va_end (ap);
char *ts = (*entry).second.textdata;
char *ts2 = res;
while (*ts)
{
if (*ts == '$')
{
ts++;
idx = *ts - '0';
strcpy (ts2, param[idx]);
ts2 += strlen(param[idx]);
ts++;
} else
{
*ts2++ = *ts++;
}
}
*ts2++ = 0;
return res;
}
else
{
return key.keydata; // Not found in dictionary
}
}
мне было интересно, если есть способ, чтобы исправить эту проблему. Я не понимаю, что вызывает это предупреждение. Из того, что я нашел на других веб-сайтах, похоже, что это предупреждение может привести к тому, что скомпилированная программа будет вести себя непредсказуемо. Некоторые люди говорят, что это должно быть скорее ошибкой, чем предупреждением. Мне не удалась определить причину этой проблемы.
+1. И мой новый факт на сегодня. –
Спасибо, кучка. Я попробую это решение. – Justin
В этом случае, однако, есть причина, почему это предупреждение не появляется в gcc LINUX во время компиляции? – Justin