более свободный спецификатор броска для в C++

Я получаю ошибку, которая говорит:

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

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

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

Какова проблема?

7
задан MLS 21 April 2010 в 23:19
поделиться

2 ответа

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

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

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

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

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

12
ответ дан 6 December 2019 в 11:47
поделиться

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

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

Верхняя ссылка в поиске google "looser throw specifier" BTW.

5
ответ дан 6 December 2019 в 11:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: