2012-11-07 71 views
0

我如何實例化一個Objective-c類到CPP類?Objective-C實例到C++類

例如我CPP類:

class Foo{ 
public: 
    Foo(); 
private: 
    MyObjcClass* myObjcClass; //it does not work 
} 

我可怎麼辦呢?

注意我使用.m作爲Objective-C和.cpp作爲C++。

非常感謝!

+0

儘管你不需要它,如果你想這樣做,你將需要**來使用'.mm'擴展名。 – 2012-11-07 19:12:03

+0

@ H2CO3你有理由,對不起。我更新了這個問題。 – ademar111190

+0

那你爲什麼不把文件重命名爲'.mm'? – 2012-11-07 19:15:01

回答

3

要麼

  • 編譯爲目標C++
  • 或聲明爲id

如果使用id,你應該介紹您的定義類型,例如:

// Foo.mm 
Foo::~Foo() { 
    MyObjcClass * a = this->myObjcClass; 
    [a release]; 
} 

在一般情況下,你應該保存類型(MyObjcClass)和避免使用id,但在宣佈變量爲id與C和C++兼容,因此您可以使用id來避免將包含Foo.hpp的所有內容編譯爲ObjC++。

+0

它的工作正常,只有一個問題,如何實例呢? – ademar111190

+1

@ ademar111190您可能在尋找:'Foo :: Foo():myObjcClass([MyObjcClass new]){}'?如果你選擇了'id',那麼只有'Foo'需要改爲編譯爲ObjC++,但是看到Foo的所有東西都只需要C++。 – justin

+1

完美! dataDownload = [DataDownload new];工作太多,但非常感謝你只是在:) – ademar111190

1

有兩種方法可以做到這一點。理智的方法是使用Objective-C++。您可以使用擴展名爲.mm的文件執行此操作,也可以更改您的構建設置。缺省情況下是基於文件擴展名進行編譯,但是您可以強制它在.cpp.m文件上使用Objective-C++。

瘋狂的方法是在objc.h中使用原始的Objective-C接口。

+0

都是真的,但還有第三種方法,就是在所有純C++代碼中使用'id',並將代碼必須將ObjC(或ObjC++)分成不同的文件,就像Justin所建議的那樣。 – abarnert