我知道这里有类似的问题,但是我无法解决这个问题。
我有一个观点,在实现上面的.m中有这个。
CFDataRef CopyImagePixels(CGImageRef inImage){
return CGDataProviderCopyData(CGImageGetDataProvider(inImage));
}
一切正常,但是我有另一个需要访问同一个函数的视图,如果我把它放在/ that / views .m文件中,同一个位置..编译器会抛出一个重复的符号错误..
这两者的唯一共同点是:
#import "MopalAppDelegate.h"
我想可能会把代码放在AppDelegate中,但是当我尝试构建时会抛出同样的错误..
我对obj-c还很新,任何建议都会非常感激。
感谢。
编辑:错误:
ld: duplicate symbol _CopyImagePixels in /Users/critter/Library/Developer/Xcode/DerivedData/Mopal-dtgtjbahdowmuderbstlmsiznwsi/Build/Intermediates/Mopal.build/Debug-iphonesimulator/Mopal.build/Objects-normal/i386/ViewerController.o and /Users/critter/Library/Developer/Xcode/DerivedData/Mopal-dtgtjbahdowmuderbstlmsiznwsi/Build/Intermediates/Mopal.build/Debug-iphonesimulator/Mopal.build/Objects-normal/i386/StudyListDetailController.o for architecture i386
collect2: ld returned 1 exit status
Command /Xcode4/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 failed with exit code 1
答案 0 :(得分:3)
您的函数正在全局范围内声明和定义。当您将相同的函数定义放在两个不同的.m
文件中时,最终会得到两个不同的函数(就编译器而言)在同一作用域(全局)中具有相同的名称,而不是当你说CopyImagePixels(myImage);
时,知道打算打电话的方式。因此错误信息。
所以有几种选择。一种是将您的函数定义为使用它的对象上的私有成员函数,如:
@implementation MyClass
- (CFDataRef) copyImagePixels: (CGImageRef)inImage {
return CGDataProviderCopyData(CGImageGetDataProvider(inImage));
}
@end
另一个(也不太喜欢)选项是将您的函数声明移动到共享头文件,如MopalAppDelegate.h
及其实现到您的{ {1}}文件。这创建了一个函数声明,可以与MopalAppDelegate.m
文件中的单个定义共享给其他类。
答案 1 :(得分:1)
您希望将函数定义放在两个文件共享的标头中,在相应的.m文件中实现它,并将该标头导入两个视图。
但如果这就是所有功能,那么为什么不直接在两个地方都拨打CGDataProviderCopyData
?