Объект класса С++ как переменная экземпляра в классе obj-c

У меня есть IPoint класса С++, и я хочу использовать экземпляр IPoint в качестве переменной экземпляра для класса obj-c. Но при компиляции это дает мне ошибку: «ожидаемый список спецификаторов перед« Ipoint »». Однако я включил желаемый заголовок, который является «IPoint.h».

Но когда я использую объект cpp в своем классе, просто инициализируя его, не делая его переменной экземпляра, он работает.

Существует особое требование к объекту cpp, который должен храниться как переменная экземпляра, поскольку он требуется в моем проекте, если может быть способ заставить его работать, например, написать оболочку для объекта или что-то еще. пожалуйста, помогите мне!


person Satyavrat    schedule 06.04.2011    source источник


Ответы (2)


Если вы хотите иметь возможность #import вашего интерфейса класса Objective-C как в коде Objective-C, так и в коде Objective-C++, вы можете использовать #ifdef для объявления переменной экземпляра как void* для первого:

@interface MyClass : NSObject {
    #ifdef __cplusplus
    IPoint *point;
    #else
    void *point;
    #endif
}

К сожалению, это означает, что вам придется вручную управлять временем существования объекта C++, создавая и уничтожая его с помощью new и delete в методах init и Dealloc цели-C++ соответственно.

person Sherm Pendley    schedule 06.04.2011

Заголовок для класса Objective-C с ivar класса C++ должен быть скомпилирован как Objective-C++. Обязательно используйте расширение .mm вместо расширения .m в имени файла исходного кода или установите файл для компиляции как Objective-C++ в Xcode.

person Kazuki Sakamoto    schedule 06.04.2011