Проблема с Objective-C ++ и Интерфейсным Разработчиком - PullRequest
0 голосов
/ 13 декабря 2010

Мой класс контроллера представления использует класс Objective C ++. Я обнаружил, что для правильной работы я должен назвать его расширением .mm для импорта / включения C ++. Тем не менее, я использую Interface Builder, и он не хочет хорошо играть, когда мой контроллер представления является файлом .mm. Я получаю ошибки сегментированного компилятора. Какие-нибудь предложения для такого случая использования?

1 Ответ

0 голосов
/ 15 марта 2012

Во-первых, как Акару предложил в одном из своих комментариев: переименуйте все файлы реализации, импортированные в .mm (вся цепочка).

Другие возможности ошибок компиляции:

  1. Makeуверен, что вы не используете зарезервированные ключевые слова c ++ в качестве имен переменных.Пример: у меня была delete переменная в переименованном файле .m реализации.Мне пришлось изменить его на any_other_delete_varible_name в .mm файле.Скорее всего, имена переменных, такие как: friend, delete, typeid - самые большие подозреваемые; -)

Цитата из: http://cs.smu.ca/~porter/csc/ref/cpp_keywords.html:

Зарезервировано еще 30слова, которых не было в C, поэтому являются новыми для C ++ , и вот они:

asm         dynamic_cast  namespace  reinterpret_cast  try
bool        explicit      new        static_cast       typeid
catch       false         operator   template          typename
class       friend        private    this              using
const_cast  inline        public     throw             virtual
delete      mutable       protected  true              wchar_t

2.Компилятор C ++ более строг в отношении приведения типов (например: я получаю сообщение об ошибке при попытке назначить NSString для идентификатора типа и т. Д.). Используйте трюки, чтобы избежать этого, если есть переменная must:как id сам решил проблему.

...