Как избавиться от предупреждения "игнорируется спецификация исключений C++"
Я недавно получил DLL, которая была реализована другими. Я должен использовать это в моем приложении. В заголовочном файле их класса у них есть объявление функции
void func1() throw (CCustomException);
Теперь, когда я компилирую, получаю предупреждение,
Спецификация исключений C++ игнорируется за исключением того, что указывает на то, что функция не является _declspec(nothrow)
Я прочитал MSDN - документацию, но не мог понять это ясно. Кроме того, я не хочу отключать предупреждение только потому, что оно появляется. Я хочу знать, что я делаю неправильно, а не отключать его.
Я думал, что моя функция, скажем, myfunc()
доступ к этому func1()
из dll не имеет этого списка спецификации исключений. Поэтому я попытался иметь соответствующий список спецификаций исключений в моей функции, как,
void myfunc1() throw (CCustomException);
Но я все еще получаю предупреждение. Что это за предупреждение и как от него избавиться? Я использую Qt 4.5 в Windows XP.
3 ответа
Хорошо, это не ответ, но я бы отбросил спецификацию исключений и никогда больше не использовал бы ее.
РЕДАКТИРОВАТЬ: я читал слишком быстро, и я не видел, что вы не написали класс самостоятельно. Лучший способ избавиться от предупреждений в msvc - это через #pragma warning (push), за которым следует #pragma warning (disable: xxxx), где xxxx - код предупреждения:
#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable:xxxx)
#endif
...
#ifdef _MSC_VER
#pragma warning(pop)
#endif
РЕДАКТИРОВАТЬ: совершенно безопасно отключить предупреждение. Спецификации исключений являются злыми, и компилятор только говорит вам, что отключает их для вас. Даже если это нарушает стандарт.
Вы можете попробовать поиграть с препроцессором:
#ifdef _SOME_MSVC_DEFINE
# define _throw(foo)
#else
# define _throw(foo) throw(foo)
#endif
void myfunc1() _throw (CCustomException);
Или попробуйте отключить это предупреждение в Visual Studio.
Я нашел эту ссылку, которая мне показалась полезной. Просто добавил, если это может быть полезно для кого-то..