2012-08-28 37 views
3

我试着做下面的A.H文件:如何在C++头文件中使用Objective-C?

#include "Bar.hpp" 

#import <Foundation/Foundation.h> 

namespace foo 
{ 
    struct A : Bar::B 
    { 
    public: 

    A() : Bar::B() {} 

    id delegate; 

    virtual void OnEvent(...); 
    }; 
} 

但我得到这样的:“我不知道的NSString是什么”的错误数不胜数。我如何正确地做到这一点?

+0

什么样的来源你包括它?它只有在语言是Objective C++(不是C,Objective C或普通C++)时才能工作。 –

+0

上面显示的源文件来自.h文件,该文件具有相应的.mm实现。 – fspirit

+0

大概,你也从其他文件中包含它。他们都是Objective C++吗?如果你从任何其他语言的源文件中包含它,那么你会得到错误。 –

回答

5

您正在将其包含在.cpp文件中?将它重命名为.mm(这是Objective-C++的正确文件扩展名)。

+0

或者可以在“Get Info”下设置文件类型。 –

+0

不,这是一个.h文件。那个.h文件有一个对应的.mm impl。 – fspirit

+0

确保#include /#导入这一个头文件的所有文件都是.mm – Farcaller

1

如果你想用你的目标C类之一的“常规” C++类中(而不是目标C++),你可以使用the trick described in this article,这归结于包括<objc/objc-runtime.h>而不是<Foundation/Foundation.h>,并使用包裹struct objc_object代替“真正的”Objective C对象。

#ifdef __OBJC__ 
@class ABCWidget; 
#else 
typedef struct objc_object ABCWidget; 
#endif 

namespace abc 
{ 
    class Widget 
    { 
    ABCWidget* wrapped; 
    public: 
    Widget(); 
    ~Widget(); 
    void Reticulate(); 
    }; 
} 
相关问题