шаблоны c ++ в проекте iPhone - PullRequest
       7

шаблоны c ++ в проекте iPhone

1 голос
/ 17 февраля 2010

Я портирую проект на систему iPhone и сталкиваюсь со следующей проблемой: У меня есть заголовок, содержащий шаблоны C ++ Если я переименую его в .mm, он не скомпилируется (потому что это должен быть заголовок), и если я сохраню его как .h, он будет интерпретирован как объективный заголовок C

Есть ли способ обойти эту проблему?

Заранее спасибо!

С уважением,

изменить: добавить сообщение об ошибке и код

template <typename T>
class CML_Matrix
{
public:
//rest of teh template
};

сообщение об ошибке: «не удается найти объявление протокола для typename»

Ответы [ 3 ]

5 голосов
/ 17 февраля 2010

Оберните его в

#ifdef __cplusplus
//templates here
#endif

Таким образом, шаблоны будут игнорироваться, когда файл включен в источник C или Objective C (.m).

Вы также можетеесть некоторые конструкции Objective C-only, заключенные в

#ifdef __OBJC__

РЕДАКТИРОВАТЬ: вы можете, в качестве альтернативы, переименовать ваши источники (не заголовок!) в .mm.Поскольку это смешанный проект ObjC / C ++, вам, вероятно, придется в какой-то момент создавать экземпляры / вызывать классы C ++;для этого вам все равно понадобится Objective C ++.Никогда не пробовал, хотя.

4 голосов
/ 18 февраля 2010

Убедитесь, что файлы с заголовком C ++ компилируются как C ++ или Objective-C ++. Файлы Objective-C (с расширением .m) не будут успешно компилироваться в C ++. Изменение их расширений на .mm должно решить вашу проблему.

2 голосов
/ 17 февраля 2010

Переименуйте его в .hpp.

(Этот заголовок должен быть #include 'd для файла .cpp или .mm. Расширение заголовка ничего не значит, кроме как дать подсказку IDE, какой язык он использует.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...