2011-03-13 87 views
1

我有3個文件。如何導入將[C++]類導入[objective-c]類的[objective-C++]類?

// A.h/A.m, Objective-C. 
#import "B.h" 
@interface A 
{ 
    B* b; 
} 
@end 
// Uses instance method of B in implementation. 



// B.h/B.mm, Objective-C++. 
#import "C.h" 
@interface B 
{ 
    C c; // c is declared without pointer. 
} 
@end 
// Uses member methods of C in implementation. 



// C.h/C.cpp, C++. 
#include <Box2D/Box2D.h> // C++ library.  
class C 
{ 
    private: 
    b2World  world; 
    b2Body*  ground; 
    b2Body*  ball; 

    public: 

    PhysicsSimulator(); 
    ~PhysicsSimulator(); 

    void setupWorld(); 
    void cleanupWorld(); 

    void tickWorld(); 
}; 
// One file of Box2D library include <cassert> 

這會導致編譯時錯誤。

/Users/eonil/Work/Trials/Box2DTest/Library/Box2D/Common/b2Settings.h:22:10: fatal error: 'cassert' file not found [1] 

它看起來我從Objective-C導入Objective-C++時必須做些特別的事情。但我無法弄清楚它是什麼。我不確定這是否可能。那是什麼..?

回答

4

不要在B.h.中包含C.h。而是說struct C;。這將允許您以與Objective-C兼容的方式轉發聲明類型。在mm包括C.h

+0

哦,對不起,我有一些重要的一點錯誤。 'B'中的'c'是無指針聲明的。我修改了問題。 – Eonil 2011-03-13 15:12:15

+0

你不能在普通的Objective-C中做到這一點。如果您只想在您的Obj-C類中放入一個C++類作爲成員,那麼一切都必須是Objective-C++。 – 2011-03-13 15:21:37

+0

感謝您的保證:) – Eonil 2011-03-13 15:26:26