#include‹vector› нет такого файла или каталога

Поэтому мне нужно использовать векторы в моем проекте. Я изменил файл .m на .mm, чтобы сделать его Objective-C++. Но когда я пытаюсь сказать:

#include <vector>

В моем .h написано, что файл или каталог не найден. Если я помещу эту строку кода в свой файл .mm, хотя ошибка не появится, но поскольку мне нужен вектор в @interface (который находится в моем .h), что я должен сделать, чтобы файл .h нашел векторный файл?

Кроме того, я попытался изменить его на компиляцию всего как Objective-C++, но это не работает, потому что я получаю некоторые ошибки в библиотеке Cocos2d, которую использую...


person Dair    schedule 26.06.2011    source источник


Ответы (3)


Включен ли ваш файл .h в какие-либо ДРУГИЕ файлы .h или .m?

Если это так, вам придется преобразовать их (или файлы, включающие их и т. д.) в .mm.

person mackworth    schedule 26.06.2011
comment
Итак, объедините .h и .mm вместе? - person Dair; 27.06.2011
comment
Неа. Этот конкретный заголовочный файл (скажем, x.h) естественно включен в x.mm, но предположительно вы используете объекты типа x и в каком-то ДРУГОМ модуле, скажем, y. Поэтому y.h будет включать строку #include x.h. Теперь, когда компилятор компилирует y.m, он не будет ожидать код C++, и поэтому будет жаловаться на строку x.h include ‹vector›, когда встретится с ней. Поэтому ym нужно переименовать в y.mm, даже если вы не используете какой-либо код C++ в y.mm. Наконец, yh может быть включено, скажем, в zh, и вы должны преобразовать zm в z.mm и т. д. Так что проще включить вектор в файле мм, если вы можете. - person mackworth; 27.06.2011
comment
Что делать, если такая же проблема возникает в проекте Swift. Нужно использовать ~ x.h в файле .swift, но перед #include‹vector› нет такого файла или каталога. Любое решение. - person hpDev_iOS; 21.11.2018
comment
У меня была такая же проблема. Я создал файл оболочки .mm, который смог импортировать в {project}-Bridge-Header.h. Внутри моего файла-оболочки я импортировал .h с #include‹vector›. - person Arijan; 09.03.2020
comment
Для Swifties нет; вы не можете использовать заголовок ObjC++ из Swift. Вам нужно будет создать вокруг него заголовочный файл только для ObjC (таким образом, включив ваш vector.h или другой С++ в связанный файл .mm) - person mackworth; 09.03.2020

Не меняя никаких .m на .mm или что-то подобное, если вы щелкнете свой проект, нажмите tagets->настройки сборки и пройдите до "LLVM GCC 4.2 - Языки" вы увидите, что Компилировать исходники как изменит это значение на Objective-C++;

person John Riselvato    schedule 14.05.2012

Мне не удалось перейти на Xcode 11.1, поэтому я удалил Xcode 11.0, а затем скачал Xcode 11.1. Xcode 11.1 работал до тех пор, пока я не перезагрузился, где я получил вышеуказанное сообщение в программе С++ командной строки «hello world» по умолчанию.

Мое решение состояло в том, чтобы: выйти из Xcode, очистить корзину, запустить Xcode

person MikeGrok    schedule 28.10.2019