Adicionando Objeto C ++ à Classe Objective-C

Eu estou tentando misturar C ++ e Objective-C, eu fiz isso na maior parte do caminho, mas gostaria de ter uma única class de interface entre o código Objective-C e C ++. Portanto, eu gostaria de ter um object C ++ persistente na interface ViewController.

Isso falha ao proibir a declaração de ‘myCppFile’ sem nenhum tipo:

#import  #import "GLView.h" #import "myCppFile.h" @interface GLViewController : UIViewController  { myCppFile cppobject; } @end 

No entanto, isso funciona muito bem no arquivo de implementação .mm (não funciona porque eu quero cppobject para persistir entre as chamadas)

 #import "myCppFile.h" @implementation GLViewController - (void)drawView:(UIView *)theView { myCppFile cppobject; cppobject.draw(); } 

Você deve usar pointers opacos e include apenas headers C ++ no arquivo que implementa sua class Objective-C. Dessa forma, você não força outros arquivos que incluem o header a usar o Objective-C ++:

 // header: #import  #import "GLView.h" struct Opaque; @interface GLViewController : UIViewController  { struct Opaque* opaque; } // ... @end 

 // source file: #import "myCppFile.h" struct Opaque { myCppFile cppobject; }; @implementation GLViewController // ... create opaque member on initialization - (void)foo { opaque->cppobject.doSomething(); } @end 

Certifique-se de que todos os arquivos que incluem GLViewController.h sejam fonts Objective-C ++ (* .mm).

Quando você inclui código C ++ no header do controlador de exibição, todas as origens que importam esse header devem ser capazes de compreendê-lo, portanto, elas devem estar em Objective-C ++

Você precisa declarar os objects C ++ em um bloco de interface em seu arquivo .mm.

Em mm

 #include "SomeCPPclass.h" @interface SomeDetailViewController () { SomeCPPclass* _ipcamera; } @property (strong, nonatomic) UIPopoverController *masterPopoverController; - (void)blabla; @end 

Eu acho que você precisa definir o seguinte sinalizador para true nas configurações do seu projeto:

 GCC_OBJC_CALL_CXX_CDTORS = YES 

Isso deve permitir que você instancie objects C ++ em suas classs Objective-C.