关于引入头文件的问题,有人能回答一下是什么原因报错吗


#1

在/opt/theos/include/下明明已经把.h文件放进去了,可是为什么在.xm文件上#import"xxxxx.h"的时候还是会报错file not found???请问是什么原因呢


#2

我看到http://bbs.iosre.com/t/tweak-xm-29-5294-error-unknown-type-name-cllocation/4053 了,
用#import <>啊

把corelocation的 头文件拉进theos? Excuse me?


#3

试过在.xm上#import 或者#import"xxx.h"会报找不到xxx.h,或者未定义xxx。:neutral_face:请问还有什么地方需要设置的吗?


#4

你知道#import <> 和#import ""的区别吗。。。。。。


#5

<>是引入系统文件,""是引入自己编写的文件,可是我也试过用#import<>了啊,还是编译不通过


#6

。。。。工程目录给我


#7

等一下哈,项目在公司的电脑里面,我现在重新写一个把源码发给你看看:pray:


#8

这个是.xm文件:
%hook CLGeocoder

import

  • (void)reverseGeocodeLocation:(CLLocation *)location completionHandler:(CLGeocodeCompletionHandler)completionHandler{
    %orig;
    }
    %end

这个是Makefile:
include $(THEOS)/makefiles/common.mk
TWEAK_NAME = MyTweak
MyTweak_FILES = Tweak.xm
MyTweak_FRAMEWORKS = CoreLocation
include $(THEOS_MAKE_PATH)/tweak.mk

这个是报错的信息:
bogon:mytweak Jk_Chan$ make

Making all for tweak MyTweak…
==> Preprocessing Tweak.xm…
==> Compiling Tweak.xm (armv7)…
Tweak.xm:23:152: error: unknown type name 'CLLocation'
...CLGeocoder* LOGOSSELF_CONST, SEL, CLLocation *, CLGeocodeCompletionHan...
^
Tweak.xm:23:166: error: unknown type name 'CLGeocodeCompletionHandler'
...CLGeocoder* LOGOSSELF_CONST, SEL, CLLocation *, CLGeocodeCompletionHan...
^
Tweak.xm:23:345: error: unknown type name 'CLLocation'
...CLGeocoder* LOGOSSELF_CONST, SEL, CLLocation *, CLGeocodeCompletionHan...
^
Tweak.xm:23:359: error: unknown type name 'CLGeocodeCompletionHandler'
...CLGeocoder* LOGOSSELF_CONST, SEL, CLLocation *, CLGeocodeCompletionHan...
^
Tweak.xm:4:184: error: declaration of 'CLGeocodeCompletionHandler' must be
imported from module 'CoreLocation.CLGeocoder' before it is required
...LOGOSSELF_CONST self, SEL _cmd, CLLocation * location, CLGeocodeComple...
^
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/CoreLocation.framework/Headers/CLGeocoder.h:21:16: note:
previous declaration is here
typedef void (^CLGeocodeCompletionHandler)(NSArray< CLPlacemark *> * __n...
^
Tweak.xm:5:93: error: cannot initialize a parameter of type 'int *' with an
lvalue of type 'CLLocation *'
..._cmd, location, completionHandler);
^~~~~~~~
6 errors generated.
make[3]: *** [/Users/Jk_Chan/Desktop/tweak/mytweak/.theos/obj/debug/armv7/Tweak.xm.fc8db1a8.o] Error 1
make[2]: *** [/Users/Jk_Chan/Desktop/tweak/mytweak/.theos/obj/debug/armv7/MyTweak.dylib] Error 2
make[1]: *** [internal-library-all_] Error 2
make: *** [MyTweak.all.tweak.variables] Error 2
bogon:mytweak Jk_Chan$

帮忙看下哪里弄错了吧,谢谢哈


#9

用gist.github.com 论坛贴的代码没法看全部被当作markdown处理了


#10

要不我加你QQ发给你看看吧


#11


代码贴到这里来了


#12

.xm上面那里应该是#import
贴漏了


#13

哪个#import被滤掉了,显示不出来- -


#14

解决了,要import两个头文件才行- -,感谢:slight_smile:


#15

同样的问题,你的解决了吗


#16

你没有这个类的文件,import,肯定找不到啊 。。你把最后一个import去掉试试。,


#17

具体怎么解决的 ,能说的详细点吗 .


#18

我也遇到这个错误

unknown type name 'CLGeocodeCompletionHandler'

最后找到这个报错的原因居然是没有引入 CoreFoundation :joy:

其它需要注意的地方

MakeFile - CoreFoundation 和 CoreLocation 必要

你的项目名称_FRAMEWORKS = CoreFoundation Foundation UIKit CoreLocation

.xm - 需要引入头文件

#import <CoreLocation/CoreLocation.h>

/opt/theos/include

也许需要把 CoreLocation 的头文件放到这个目录, 也许不需要, 因为在MakeFile已经加入 CoreLocation.framework 了