У меня есть приложение C++, которое я пытаюсь подключить к iPhone, и для начала. Я пытаюсь заменить мой загрузчик текстур C++ загрузчиком текстур obj-C++, чтобы Я могу использовать библиотеки какао.Использование файла Objective-C++ из файла C++
Много моих C++ файлов (.cpp файлов) называют текстуры погрузчиком с чем-то вроде:
GLuint mTexture = TextureLoader::LoadTexture("file.png") //LoadTexture is a static method`
, но всякий раз, когда я пытаюсь сделать класс TextureLoader (внутри файла .mm), который имеет obj- C, я вынужден сделать вызывающий класс также файлом .mm.
Я хочу избежать ползучести использования .mm. Как мне это сделать? Возможно ли это?
В принципе у меня есть файл, который имеет .mm ...
GLuint TextureLoader::LoadTexture(const char* path)
{
//...lots of c and obj-c code
return texture
}
и, кроме класса C++ (или это Obj-C++ в этот момент?)
Я хочу быть возможно использовать его из файла .cpp, не создавая также вызывающий класс .mm
Есть ли все-таки сделать это?
Cheers guys.
Спасибо, Павел, вы поняли это. Я думаю, проблема в том, что у меня, должно быть, был код Obj-c в заголовочном файле моего кода загрузки текстуры. Это означало, что, когда мой код на C++ включал файл .h, компилятору это не понравилось. Я попробую и суммирую: Скажем, у меня есть Foo.cpp и Foo.h (только C++), а Foo.cpp должен включать TextureLoader.h, который содержит определение класса C++, в методах членов которого используется код obj-c (в TextureLoader.mm). Убедитесь, что в TextureLoader.h нет кода obj-c или какао, иначе Foo.cpp не сможет # включить его. – user156848
Очевидный ответ: не определяйте свои функции-члены, которые используют конструкции ObjC в файле заголовка; определите их в .mm файле. –