【问题标题】:@import "Unexpected '@' in program"@import "程序中出现意外的'@'"
【发布时间】:2013-10-16 20:24:51
【问题描述】:

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

#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;

还有什么需要做的吗?

【问题讨论】:

  • 在你使用@import的地方添加代码

标签: ios ios7 xcode5


【解决方案1】:

来自@hw731的评论我认为你使用不好@import

导入框架的旧语法:

#import <UIKit/UIKit.h>

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

@import UIKit;

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

看看here

【讨论】:

  • 不,我使用了正确的@import UIKit;这些设置也已设置。
  • 问题是我使用workspace,第二个项目偶尔会丢失模块设置。
  • 这对我有用。我有一个在 iPhone OS 2.0 中开始的项目,它被设置为 NO。谢谢!
【解决方案2】:

遇到同样的错误,检查标准位置:

  • 是的,我的代码语法正确
  • 是的,所有“Apple LLVM 5.0 - 语言 - 模块”设置都是“是”。在这个项目和每个目标中。
  • 是的,我使用的是工作区,但检查了所有项目都启用了模块。两个项目及其各自的目标。
  • 是的,检查过我在任何地方都没有任何有趣的“智能”引号
  • 是的,检查了我在 header.h 或 file.m 文件中(不是 .mm/.c/.cpp/.hpp)

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

【讨论】:

  • 我也有一些用于 C++(协议缓冲区)的 .mm 文件。我在 .pch 文件中使用 #import 转换回旧语法。现在一切都编译好了。
【解决方案3】:

我还发现在 pch 文件中使用以下代码:

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

@import不兼容。

【讨论】:

    【解决方案4】:

    当我将 UIActivity 子类化并在 .m 文件中写入属性时出现同样的问题

    @property(nonatomic, strong)NSArray *activityItems;
    

    通过将此属性移动到 .h 文件来修复。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多