2013-08-04 2 views
0

получил файл с именем GeneralUtils.m и его заголовочный файл. Я использую это как общие методы в нескольких проектах IOS.m и дилемма расширения файла файла

Вопрос: Некоторые проекты успешно компилируют. , но одна из ошибок проекта бросает во время компиляции: чем я изменяю расширение файла m в файл mm. и он компилируется. Но, кстати, другие проекты не компилируются и не переименовываются снова.

Я хочу понять логику. почему некоторые из моего проекта IOS хочет, чтобы ее расширение, как м и другой хочет его как расширение файла мм

Сведения об ошибке:

Undefined symbols for architecture armv7: 
    "randIntBetween(int, int)", referenced from: 
    -[Blah method1] in File1.o 
    ld: symbol(s) not found for architecture armv7 
    clang: error: linker command failed with exit code 1 (use -v to see invocation) 
+0

Что в этом файле? В каком случае это ошибка? И какова ошибка в другом случае? (FYI, 'mm' для файлов Objective-C++, поэтому вы должны смешивать C++ и Objective-C.) – mattjgalloway

+0

Что вы подразумеваете, что проекты« хотят »определенного расширения файла? Если вы компилируете файл .mm, вы компилируете Objective-C++, что означает, что связанный заголовок обрабатывается в контексте C++. Возможно, вам нужна директива «extern» C «', чтобы предотвратить зависание C++ с привязкой ваших функций. – CodaFi

+0

включает в себя простые методы только. без каких-либо деклараций классов. вопрос: 4 количество проектов IOS принимает GeneralUtils.m 1 количество проектов IOS принимает только GeneralUtils.mm, а не m file ?! –

ответ

5

расширение .m означает, что Objective-C и расширение. mm означает, что это Objective-C++. Таким образом, это разные файлы, и вы должны знать, что в нем.

+0

ofsure. но не знал, что файл mm не может вызывать функции, объявленные в файле m. –

+0

@ N.Ramos. Файл mm определенно может вызывать функции IMPLEMENTED в файле m. Но учтите, что они должны быть ЗАКЛАДНЫ в файле h. –

+0

все файлы m и mm имеют соответствующие заголовочные файлы. –

Смежные вопросы