Как избавиться от предупреждения «игнорируется спецификация исключений C ++» - PullRequest
7 голосов
/ 29 июня 2010

Недавно я получил DLL, которая была реализована другими. Я должен использовать это в моем приложении. В заголовочном файле их класса у них есть объявление функции

void func1() throw (CCustomException);

Теперь, когда я компилирую, получаю предупреждение,

Спецификация исключения C ++ игнорируется кроме как указать, что функция не _declspec (nothrow)

Я прочитал MSDN - Документация , но не мог понять это ясно. Кроме того, я не хочу отключать предупреждение только потому, что оно появляется. Я хочу знать, что я делаю неправильно, а не отключать его.

Я думал, что моя функция, скажет myfunc(), получая доступ к этому func1() из dll, не имеет этого списка спецификации исключений. Поэтому я попытался иметь соответствующий список спецификаций исключений в моей функции, как,

void myfunc1() throw (CCustomException);

Но я все еще получаю предупреждение. Что это за предупреждение и как от него избавиться? Я использую Qt 4.5 в Windows XP.

Ответы [ 3 ]

11 голосов
/ 29 июня 2010

Хорошо, это не ответ, но я бы выбросил спецификацию исключений и никогда больше не использовал бы ее .

РЕДАКТИРОВАТЬ: Я читаю слишком быстро, и я не видел, чтобы вы сами не писали урок. Лучший способ избавиться от предупреждений в 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

РЕДАКТИРОВАТЬ: совершенно безопасно отключить предупреждение. Спецификации исключений являются злыми, и компилятор только говорит вам, что отключает их для вас. Даже если это нарушает стандарт.

0 голосов
/ 30 июня 2010

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

0 голосов
/ 29 июня 2010

Вы можете попробовать поиграть с препроцессором:

#ifdef _SOME_MSVC_DEFINE
#  define _throw(foo)
#else
#  define _throw(foo) throw(foo)
#endif

void myfunc1() _throw (CCustomException);

Или попробуйте отключить это предупреждение в Visual Studio.

...