我正在將此C++程序中的某個函數用於從HP-UX移植到LINUX中,這個問題存在。基本上,什麼似乎是問題是,對於功能無法通過`...'傳遞類型爲'const DictionaryKey'的對象
const char * Dictionary::lookup(const DictionaryKey &, ...)
gcc編譯器似乎是在抱怨,我無法通過const類型字典通過的對象......
了程序的源代碼是相當古老,並期待利用大量的C風格的構造。這個特定的函數接受stdarg.h頭文件允許的變量列表。此外,該警告僅在HP-UX的gcc(版本2.95.2)中報告,而不在LINUX的gcc(版本4.3.2)中報告。
$ 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
在這種情況下,是否有理由在編譯期間在LINUX的gcc中不顯示此警告? – Justin