Возможно, ваша проблема в том, что заголовок .h содержит код C ++. Вы должны прочитать о "единицах компиляции". Короче говоря, невозможно сказать, на каком языке написан заголовочный файл для компилятора. Поэтому он всегда использует язык исходного файла, который включает в себя заголовок. Поэтому, если вы включите заголовок C ++ из файла .m
, он не будет работать.
Но есть решение: Apple изобрела «новый язык», который он называет Objective-C ++, который позволяет вам писать операторы C ++ и Objective-C в одном файле. Для каждого файла ObjC, использующего заголовок C ++, необходимо изменить суффикс имени файла исходного файла, который использует , с .m
(ObjC) на .mm
(ObjC ++ ), что означает, что исходные файлы смогут компилировать заголовки ObjC и C ++.
Конечно, вы можете не захотеть менять все ваши файлы на ObjC ++. С одной стороны, C ++ (и, соответственно, Objective-C ++) - это язык с гораздо более сложным синтаксисом, чем C и Objective-C, поэтому время компиляции будет больше, а также, C ++ ведет себя по-разному в некоторых аспектах, чем C (и, соответственно, расширение). , ObjC ++ ведет себя немного иначе, чем ObjC).
Что обычно делают люди, так это ограничивают части C ++ своими файлами реализации и держат C ++ вне заголовка. Они пишут класс Objective-C, который «оборачивает» класс C ++ и предоставляет методы, которые вызывают соответствующие методы C ++ для объекта C ++. Тогда любой файл ObjC в вашем проекте может включать этот класс без необходимости включать сам компилятор ObjC ++, который внутренне («тайно») использует ObjC ++ для вызова кода C ++.
Некоторые полезные советы о том, как скрыть код C ++ внутри класса ObjC, см. Можно ли отделить основную функцию и классы C ++ от процедур Objective-C и / или C при компиляции и компоновке?