более слабый спецификатор броска для C ++ - PullRequest
7 голосов
/ 22 апреля 2010

Я получаю сообщение об ошибке:

ошибка: более слабый спецификатор броска для 'virtual CPLAT :: CP_Window :: ~ CP_Window ()'

О деструкторе я никогда не слышалоб этом раньше и в некоторых поисках Google говорят, что это может быть проблема GCC 4, и я не уверен, как обойти ее, поскольку мне нужен GCC 4 для создания универсального двоичного файла.

Моя среда: OS X 10.6,XCode 3.2.2, GCC 4 для создания универсального двоичного файла.

В чем проблема?

Ответы [ 2 ]

12 голосов
/ 22 апреля 2010

Я предполагаю, что у CPLAT есть базовый класс? Я также предполагаю, что вы не поместили спецификатор throw в деструктор CPLAT?

Вы можете поставить throw(X) (где X - список исключений через запятую) в конце сигнатуры функции, чтобы указать, какие исключения разрешено создавать. Если вы укажете throw() в качестве спецификатора throw, то это будет означать, что из этой функции не могут быть сгенерированы исключения. Это довольно распространено делать с деструкторами, так как вы никогда не хотите, чтобы деструктор генерировал исключение.

Класс, который переопределяет функцию, имеющую спецификатор throw, не может иметь более слабый спецификатор throw (перечислить больше исключений), чем переопределяемая функция, поскольку это указывает на то, что функция производного класса может нарушать спецификатор throw базового класса. функция. Отсутствие спецификатора throw означает, что любое исключение может быть выброшено из этой функции, поэтому оно настолько свободно, насколько это возможно.

По всей вероятности, вам нужно добавить throw() в конец сигнатуры функции деструктора CPLAT.

Редактировать: Кстати, я, вероятно, должен добавить, что вы, вероятно, не хотите использовать спецификаторы броска (кроме throw() для деструкторов), даже не зная, что это именно то, что вам нужно. В отличие от проверенных исключений Java, они не перехватываются во время компиляции, а скорее завершают работу вашей программы в случае нарушения. Поэтому лучше их не использовать, если вы не знаете, что делаете.

5 голосов
/ 22 апреля 2010

http://www.agapow.net/programming/cpp/looser-throw-specifier

Вы добавили throw () после объявления ~ CP_Window ()?

Верхняя ссылка в поиске Google "BTW."

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...