Как избавиться от предупреждения "игнорируется спецификация исключений 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.

Я нашел эту ссылку, которая мне показалась полезной. Просто добавил, если это может быть полезно для кого-то..

Другие вопросы по тегам