2013-10-09 24 views
26

我将项目更新为Xcode 5,并在构建设置中启用了模块。 但是,当我使用@import时,看到编译器错误Unexpected '@' in program@import“程序中的意外'@'

#ifndef __IPHONE_7_0 
#warning "This project uses features only available in iOS SDK 7.0 and later." 
#endif 

#ifdef __cplusplus 
#import <opencv2/opencv.hpp> 
#endif 

#ifdef __OBJC__ 
@import SystemConfiguration; 
@import UIKit; 

它应该做什么?

+0

将代码添加到您使用的@import –

回答

64

@hw731的评论,我认为你用不好@import

老语法来导入架构:

#import <UIKit/UIKit.h> 

但现在,你可以使用新的语法:

@import UIKit; 

您需要启用这些模块才能使用关键字@import(在使用Xcode 5创建新项目时默认启用):

enter image description here

看一看here

+2

不,我使用正确的@import UIKit;这些设置也被设置。 – Shmidt

+0

问题是我使用工作区,第二个项目偶尔会丢失模块设置。 – Shmidt

+1

这对我有用。我有一个在iPhone OS 2.0中启动的项目,它被设置为NO。谢谢! – jmurphy

5

我还发现,使用PCH文件下面的代码:

#ifdef __cplusplus 
#import <opencv2/opencv.hpp> 
#endif 

不与@import兼容。

12

得到了同样的错误,查了规范的地方:

  • 是的,我有正确的代码语法
  • 是,所有的 “苹果LLVM 5.0 - 语言 - 模块” 设置为YES。在这个项目和每个目标。
  • 是的,我正在使用工作区,但检查了所有项目都启用了模块。这两个项目和他们的每个目标。
  • 是的,检查我没有任何有趣的“智能”报价
  • 是的,检查我是在一个header.h或file.m文件(不是.mm/.c/.cpp /。 HPP)

的问题是,头文件是导入file.mm文件,它似乎不支持新的@import模块语法!将该标题转换回旧式#import格式,一切都很顺利。

+2

我也有一些.mm文件的C++(协议缓冲区)。我使用.pch文件中的#import将其转换回旧语法。现在一切都很好。 – subv3rsion

0

同样的问题,当我子类UIActivity和.m文件作为

@property(nonatomic, strong)NSArray *activityItems; 

通过移动该属性来.H文件固定写属性。