2016-01-07 65 views
0

我正在将代码添加到使用card.io项目的现有iphone应用程序(由其他人编写)。这是我尝试的第一个改变。该应用程序编译和运行良好,没有任何更改,但后来当我尝试向我的xcode项目添加一个空的.cpp和.h文件时,我开始在名为CardIOMacros.h的不相关的obj-c头文件中获得语法错误。我正在使用xcode 7.2并编译iphone 4s设备。将空C++文件添加到xcode项目在obj-c头文件中创建语法错误

我经历了添加的.cpp和.h文件

  1. 右键单击项目导航项目节点上的过程
  2. 点击新文件
  3. 单击C++图标
  4. 键入文件名并选中创建头文件选项
  5. 选择我的项目目录中的子目录。
  6. 按在主菜单

下面的构建和运行按钮是在那里我得到错误的文件。错误显示在代码下面。

// 
// CardIOMacros.h 
// See the file "LICENSE.md" for the full license governing this code. 
// 

// CardIOLog is a replacement for NSLog that logs iff CARDIO_DEBUG is set. 

#if CARDIO_DEBUG 
#define CardIOLog(format, args...) NSLog(format, ## args) 
#else 
#define CardIOLog(format, args...) 
#endif 

@interface CardIOMacros : NSObject 

+ (id)localSettingForKey:(NSString *)key defaultValue:(NSString *)defaultValue productionValue:(NSString *)productionValue; 

+ (NSUInteger)deviceSystemMajorVersion; 

+ (BOOL)appHasViewControllerBasedStatusBar; 

@end 

#define iOS_MAJOR_VERSION [CardIOMacros deviceSystemMajorVersion] 
#define iOS_8_PLUS   (iOS_MAJOR_VERSION >= 8) 
#define iOS_7_PLUS   (iOS_MAJOR_VERSION >= 7) 
#define iOS_6    (iOS_MAJOR_VERSION == 6) 
#define iOS_5    (iOS_MAJOR_VERSION == 5) 

Compliler错误

/Users/michael/sdev/projectname/ios/card.io-iOS-20151210/Classes/CardIOMacros.h 
/Users/michael/sdev/projectname/ios/card.io-iOS-20151210/Classes/CardIOMacros.h:14:1: Expected unqualified-id 
/Users/michael/sdev/projectname/ios/card.io-iOS-20151210/Classes/CardIOMacros.h:18:1: Expected external declaration 
/Users/michael/sdev/projectname/ios/card.io-iOS-20151210/Classes/CardIOMacros.h:18:4: C++ requires a type specifier for all declarations 
/Users/michael/sdev/projectname/ios/card.io-iOS-20151210/Classes/CardIOMacros.h:18:15: Expected ';' after top level declarator 
/Users/michael/sdev/projectname/ios/card.io-iOS-20151210/Classes/CardIOMacros.h:20:1: Expected external declaration 
/Users/michael/sdev/projectname/ios/card.io-iOS-20151210/Classes/CardIOMacros.h:20:4: C++ requires a type specifier for all declarations 
/Users/michael/sdev/projectname/ios/card.io-iOS-20151210/Classes/CardIOMacros.h:20:9: Expected ';' after top level declarator 
/Users/michael/sdev/projectname/ios/card.io-iOS-20151210/Classes/CardIOMacros.h:22:1: Expected unqualified-id 

h和cpp文件是空的,我不连#包括新的C++头文件中的任何其他文件。任何帮助,将不胜感激。

回答

1

请确保您没有包含在...-Prefix.pch中的标题。

+0

我该如何检查? – user1505520

+0

Xcode项目通常在“支持文件”组下有一个“PROJECT_NAME-Prefix.pch”文件。编译器的行为就像该文件包含在每个源文件中一样。所以如果你在这个前缀头文件中有Objective-C代码(或者包含一个包含Objective-C的文件),那么即使是空的cpp也不能编译,因为Xcode会尝试用它的C++编译器从前缀头文件构建Objective-C代码。 –

+1

就是这样。在其中一个-Prefix.pch文件中有“#import CardIOMacros.h”。我把它包装在“#ifdef __OBJC__ #endif”宏中,它工作正常!谢谢你,你真棒! – user1505520

相关问题