В проекте zxing iphone в файле readme указано:
- Может случиться так, что при попытке создать собственный проект с помощью ZXingWidgetController вы получаете компоновщик ошибки, такие как "undefined ссылка на". Если эта ошибка выглядит как С++ undefined, затем переименование main.m в main.mm(Objective-C ++ исходный суффикс) может решить проблему
Это действительно так. Но мне интересно, почему?
Ответ 1
Расширение .mm означает Objective-C ++, когда компилятор может обрабатывать классы С++.
Но при использовании расширения .m он сможет скомпилировать только C-код без классов С++.
Ответ 2
И .m
, и .mm
являются расширениями файлов классов исходного кода для приложений на базе Mac. Файлы .m
могут содержать классы Objective-C и Objective-С++. Чтобы избежать конфликтов между ними в сценариях смешанного использования, существует соглашение о переименовании всех файлов классов Objective-С++ в .mm
. Это помогает компиляторам различать.
Итак, в проекте, который использует Objective-C и Objective-С++, вы увидите:
.m
файлы, содержащие Objective-C
.mm
файлы, содержащие Objective-С++