2012-02-14 6 views
1

Я с удовольствием использую объекты C++ в объектных C++ (.mm) заголовочных файлах и файлах реализации, а также в классах Objective C (++) из моих файлов реализации C++, , но всякая попытка использовать классы Objective C в Файл заголовка C++ приводит к ошибкам компилятора.Объекты AppKit в заголовочных файлах Obj-C++?

Такие вещи, как этого класса декларации не может скомпилировать:

class CQuartzTextRenderer { 

public: 
       CQuartzTextRenderer(); 
virtual  ~CQuartzTextRenderer(); 
virtual void Render(CDrawingOptions &inDrwOpt); 


private: 

    NSFont* CreateNSFontForFontName(string &fontName, int fontSize); 
}; 

независимо от того, что (AppKit/..) включает в себя я пробовал. Любые идеи?

+0

Где вы получаете ошибки/предупреждения? Это, безусловно, поможет дать вам ответ. –

ответ

3

У вас не может быть Objective-C класс внутри файла заголовка, который включен .cpp просто потому, что XCode будет использовать стандартный компилятор g ++ и рассматривать файл как простой C++.

Чтобы исправить эти ошибки (и позволено использовать классы Objective-C в заголовочных файлах) вы должны убедиться, что файл заголовка включается ТОЛЬКО .mm файлов, а не в какой-либо .cpp.

Просто добавление: может случиться так, что у вас действительно есть foobar.h в сочетании с foobar.mm. Это правильно и позволяет вам иметь Objective-C в файле заголовка, но если этот файл включен где-то еще в .cpp или другим .h, который включен в .cpp, тогда вы получите ошибки компиляции. Имейте в виду, что каждая единица компилируется независимо от других.

+0

Uh, right - ** anybody ** включая этот файл также должен быть Obj-C++ .. Сортировка имеет смысл! – Jay

+0

Работающие сейчас - приветствия. – Jay

+0

Я могу обеспечить этот принцип, потому что я фактически переношу проект LOC на 25 000 с Objective-C на C++, поэтому мне пришлось решать идентичные проблемы. Сначала я переименовал все файлы '.m' в' .mm'. Теперь я медленно переименовываю их в '.cpp', как только они больше не требуют каких-либо Objective-C. – Jack

Смежные вопросы