ios - clang 错误:函数定义声明为“typedef”
问题描述
我正在使用clang编译我的代码,但是我得到一个错误,代码和错误如下:
/Users/fenglihai/llvm/llvm_build/Debug/bin/ClangConfuse /Users/fenglihai/Desktop/Test/Test/ITXAppdelegate.m /Users/fenglihai/Desktop/Test/Test/main.m /Users/fenglihai/Desktop/Test/Test/MainViewController.m /Users/fenglihai/Desktop/Test/Test/VTEnumType.h /Users/fenglihai/Desktop/Test/Test/ITXAppdelegate.h /Users/fenglihai/Desktop/Test/Test/MainViewController.h -- -w -std=gnu11 -fobjc-abi-version=2 -Wnullability-completeness -Wno-arc-repeated-use-of-weak -Wno-conversion -Wconstant-conversion -Wint-conversion -Wbool-conversion -Wenum-conversion -Wno-float-conversion -Wnon-literal-null-conversion -Wobjc-literal-conversion -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator12.1.sdk -isystem /Users/fenglihai/llvm/llvm_build/Debug/lib/clang/9.0.0/include -Wnull-dereference -fobjc-weak -ObjC -mios-simulator-version-min=8.0 -ObjC -lSDWebImage -lSVProgressHUD -lYYCache -lYYCategories -lc++ -ljcore-ios-1.2.6 -ljpush-ios-3.1.2 -lpop -lresolv -lsqlite3 -lz -framework Accelerate -framework CFNetwork -framework CoreFoundation -framework CoreGraphics -framework CoreImage -framework CoreTelephony -framework CoreText -framework Foundation -framework ImageIO -framework QuartzCore -framework Security -framework SystemConfiguration -framework UIKit -weak_framework UserNotifications -I/Users/fenglihai/Desktop/Test/Test -I/Users/fenglihai/Desktop/Test/Test -I/Users/fenglihai/Desktop/Test/Test -I/Users/fenglihai/Desktop/Test/Pods/Headers/Public -I/Users/fenglihai/Desktop/Test/Pods/Headers/Public/JPush -I/Users/fenglihai/Desktop/Test/Pods/Headers/Public/SDWebImage -I/Users/fenglihai/Desktop/Test/Pods/Headers/Public/SVProgressHUD -I/Users/fenglihai/Desktop/Test/Pods/Headers/Public/YYCache -I/Users/fenglihai/Desktop/Test/Pods/Headers/Public/YYCategories -I/Users/fenglihai/Desktop/Test/Pods/Headers/Public/pop
我得到错误:
/Users/fenglihai/Desktop/Test/Test/VTEnumType.h:13:44: error: function definition declared 'typedef'
typedef NS_ENUM(NSUInteger, VTLayoutStyle) {
^
/Users/fenglihai/Desktop/Test/Test/VTEnumType.h:15:5: error: use of undeclared identifier 'VTLayoutStyleDefault'
VTLayoutStyleDefault,
^
/Users/fenglihai/Desktop/Test/Test/VTEnumType.h:17:5: error: use of undeclared identifier 'VTLayoutStyleDivide'; did you mean 'VTLayoutStyle'?
VTLayoutStyleDivide,
^~~~~~~~~~~~~~~~~~~
VTLayoutStyle
/Users/fenglihai/Desktop/Test/Test/VTEnumType.h:13:29: note: 'VTLayoutStyle' declared here
typedef NS_ENUM(NSUInteger, VTLayoutStyle) {
^
/Users/fenglihai/Desktop/Test/Test/VTEnumType.h:19:5: error: use of undeclared identifier 'VTLayoutStyleCenter'; did you mean 'VTLayoutStyle'?
VTLayoutStyleCenter,
^~~~~~~~~~~~~~~~~~~
VTLayoutStyle
/Users/fenglihai/Desktop/Test/Test/VTEnumType.h:13:29: note: 'VTLayoutStyle' declared here
typedef NS_ENUM(NSUInteger, VTLayoutStyle) {
^
4 errors generated.
Error while processing /Users/fenglihai/Desktop/Test/Test/VTEnumType.h.
VTEnumType.h
#ifndef VTEnumType_h
#define VTEnumType_h
/** 导航栏布局样式 */
typedef NS_ENUM(NSUInteger, VTLayoutStyle) {
/** 默认样式,item自适应文本宽度,间距由itemSpacing决定 */
VTLayoutStyleDefault,
/** items等分导航条宽度,常用于item数较少时 */
VTLayoutStyleDivide,
/** 导航栏居中布局,间距由itemSpacing决定 */
VTLayoutStyleCenter,
};
#endif /* VTEnumType_h */
ITXAppdelegate.m
#import "ITXAppdelegate.h"
#import "VTEnumType.h"
@interface ITXAppdelegate ()
@property (nonatomic, assign) VTLayoutStyle height;
@end
@implementation ITXAppdelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.height =VTLayoutStyleDefault ;
return YES;
}
@end
解决方案
如果您通过该直接命令行构建您的项目来clang,那么我认为发生的事情是您将头文件(.h)指定为clang作为源文件,它们不是。
如果宏不可用,这就是你会得到的错误NS_ENUM
——编译器只是对你在那里尝试做的事情感到困惑。该宏通常通过标准 Foundation 和 Cocoa 包含头文件提供,但如果编译器试图将您的头文件视为自己的源文件,则该头文件不包含 Foundation,因此枚举内容是t 在那一点上定义。
更重要的是,您应该只要求 clang 编译源单元 (.m)。编译器将看到对标头的引用,并根据需要通过预处理器加载它们。如果在执行此操作时找不到所需的标头,它会通知您。
推荐阅读
- intellij-idea - 项目浏览器窗口中的 IntelliJ 缩进指南
- .net - 本地使用c#代码连接Oracle11g失败
- c# - 在使用 EF Core 时使用 [ForeignKey] 访问相关表,而实际上在 DB 中没有外键
- javascript - 除非信息填写正确,否则如何使提交按钮无法点击?
- matlab - 将 Matlab 脚本作为 ExternalCode 组件运行
- java - 为什么在编译时不检查空指针异常,例如在 Java 中迭代空集合而不是运行时异常时?
- java - 如何生成 100 个 UUIDS 并稍后在 Jmeter 中使用?
- scala - 是否有也应用上下文的地图功能?
- c++ - 如何将 HTTPS 流量重定向到 localhost:443 上的代理?
- r - 有没有办法确定特定日期介于哪两个日期之间?