Добавление объекта C++ к классу Objective C

Я пытаюсь смешать C++ и Objective C, я сделал его большей частью пути, но хотел бы иметь единственный интерфейсный класс между кодом C++ и Objective C. Поэтому я хотел бы иметь персистентный объект C++ в интерфейсе ViewController.

Это перестало работать путем запрещения объявления 'myCppFile' без типа:

#import <UIKit/UIKit.h>
#import "GLView.h"
#import "myCppFile.h"

@interface GLViewController : UIViewController <GLViewDelegate>
{
    myCppFile cppobject;
}

@end

Однако это работает просто великолепно в .mm файле реализации (Он не работает, потому что я хочу, чтобы cppobject сохранился между вызовами),

#import "myCppFile.h"
@implementation GLViewController
- (void)drawView:(UIView *)theView
{
    myCppFile cppobject;
    cppobject.draw();
}
18
задан Georg Fritzsche 11 February 2012 в 19:40
поделиться

3 ответа

Вы должны использовать непрозрачные указатели и включать только заголовки C ++ в файл, который реализует вашу цель- C класс. Таким образом, вы не заставляете другие файлы, содержащие заголовок, использовать Objective-C ++:

// header:
#import <UIKit/UIKit.h>
#import "GLView.h"

struct Opaque;

@interface GLViewController : UIViewController <GLViewDelegate>
{
    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
28
ответ дан 30 November 2019 в 07:44
поделиться

] Я думаю, вам нужно установить следующий флаг в true в настройках вашего проекта:

GCC_OBJC_CALL_CXX_CDTORS = YES

Это должно позволить вам создавать экземпляры объектов C ++ в ваших классах Objective-C.

0
ответ дан 30 November 2019 в 07:44
поделиться

Убедитесь, что все файлы, включающие GLViewController.h, являются исходниками Objective-C++ (*.mm).

Когда вы включаете C++ код в заголовок вашего контроллера представления, все исходники, которые импортируют этот заголовок, должны быть способны понять его, поэтому они должны быть на Objective-C++

3
ответ дан 30 November 2019 в 07:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: