向现有Objective-C类添加函数会引发错误

时间:2013-04-18 09:52:30

标签: c++ objective-c cocoa

我正在为NSImage类编写C ++包装器,我在编写附加功能时遇到了麻烦。以下是简要总结:

NSImageExtras.h

@interface NSImage (MyExtensions)
-(NSString*) myExtraFunction;
@end

NSImageExtras.mm

#import "NSImageExtras.h"

@implementation NSImage (MyExtensions)
-(NSString*) myExtraFunction
{
    return @"Hello World";
}
@end

NSImageWrapper.h

class NSImageWrapper
{
public:
    // nsImage is of type (NSImage*)
    NSImageWrapper(void* nsImage) {myImage = nsImage;}
    ~NSImageWrapper() {}

    CFStringRef myExtraFunction();

    // Cast this into (NSImage*)
    void* getNSImage() {return myImage;}

private:
    void* myImage;
};

NSImageWrapper.mm

#include "NSImageWrapper.h"
#import "NSImageExtras.h"

CFStringRef NSImageWrapper::myExtraFunction()
{
    return (CFStringRef) [(NSImage*) myImage myExtraFunction]; 
}

这个编译。但是当我尝试调用myExtraFunction时,由于找不到该函数而引发错误。如果我将import "NSImageExtra.h"更改为import "NSImageExtra.m",那么它可以正常工作,但我宁愿避免在我的导入中添加.m文件。

知道为什么会这样吗?

非常感谢。

1 个答案:

答案 0 :(得分:0)

您可以尝试在NSImageWrapper.h中导入NSImageExtras.h而不是NSImageWrapper.mm。您需要在头文件中包含子类标题。