Использование объектов C ++ из Obj-C / Obj-C ++ - вызов внешних методов - PullRequest
0 голосов
/ 26 мая 2011

Я использую объекты C ++ в коде Obj-C. Для этого я обернул объекты C ++ в объекты ObjC, которые, в свою очередь, используют непрозрачные указатели для доступа к классам C ++. Это работает.

Проблема: Объекты C ++ (например, CPPObj.cc) используют методы из дополнительных заголовочных файлов c ++ (например, ToolsCPP.h) - когда я пытаюсь скомпилировать код ObjC (например, Obj.mm), он жалуется, что эти методы не определены.

Даже если я включаю ToolsCPP.h непосредственно в файл Obj.mm, он все равно будет жаловаться.

Уродливое решение: Включите все необходимые методы из ToolsCPP.h в CPPObj.cc, чтобы объекты C ++ были полностью автономными. Это было бы огромной болью.

Есть ли лучший / простой / правильный способ сделать это?

Спасибо!

Ответы [ 4 ]

0 голосов
/ 26 мая 2011

Поскольку это, по-видимому, ошибка компоновщика, это означает, что код из "ToolsCPP.cc", то есть код, соответствующий ToolsCPP.h, не компилируется и не связан с остальной частью вашего проекта.

Убедитесь, что ToolsCPP.cc включен в ваш проект, и убедитесь, что он действительно компилируется.

0 голосов
/ 26 мая 2011

Я не знаю точную ошибку, которую вы видите, но я подозреваю, что вам может понадобиться обернуть ваши заголовки на основе C внешним символом "C", как это в ваших файлах .mm:

extern "C" {
  #import "foo.h"
}

Больше информации здесь: Зачем нам нужен extern "C" {#include } в C ++?

0 голосов
/ 26 мая 2011

вы должны либо обернуть то, что вам нужно (например, с помощью методов objc), либо использовать objc ++, чтобы позволить клиенту правильно использовать типы c ++.

0 голосов
/ 26 мая 2011

Похоже, вы хотите упаковать свой код ToolsCPP (и любые другие зависимости C ++) в библиотеку, а затем связать его с вашим кодом Obj-C.

...