#определить в предварительно скомпилированном заголовке, не распознанном в файлах .mm

#c #objective-c #cocoa #xcode #ios

#c #objective-c #cocoa #xcode #iOS

Вопрос:

Почему оператор #define в .pch не распознается файлами .mm?

Приводит к «использованию необъявленного идентификатора» и «не объявлено в этой области» при попытке ссылаться на макрос.

Pch выглядит следующим образом:

 #import <Availability.h>

#ifndef __IPHONE_3_0
#warning "This project uses features only available in iPhone SDK 3.0 and later."
#endif

#ifdef __OBJC__
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#endif

#ifdef DEBUG
#define dNSLog(...) NSLog(@"%s %@", __PRETTY_FUNCTION__, [NSString stringWithFormat:__VA_ARGS__])
#else
#define dNSLog(format, ...)
#endif
  

Комментарии:

1. Не могли бы вы отредактировать свой вопрос и вставить содержимое вашего файла .pch?

2. На первый взгляд, ваш префиксный заголовок выглядит нормально. Однако я бы поместил это #ifdef DEBUG внутрь #ifdef __OBJC__ , поскольку вы используете NSString . Я предполагаю, что dNSLog() это макрос, который выдает вам ошибки. Можете ли вы проверить выходные данные препроцессора для нарушающего .mm файла и посмотреть, использовался ли заголовок prefix? Кроме того, правильно ли добавлен файл-нарушитель .mm к целевому объекту, использующему ваш заголовок prefix?

Ответ №1:

У меня была та же проблема, очистка не решала ее.

После закрытия и перезапуска Xcode 4 все было в порядке. Если это может кому-то помочь…

Комментарии:

1. Это было именно то решение, которое я нашел.

Ответ №2:

Оказывается, Xcode 4 на самом деле не очищал сборку. 🙁