2012-08-28 47 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(); 
    }; 
} 
相關問題