включая заголовки C/C++ в Xcode 4

Я без проблем использовал библиотеку C++ в проектах, созданных с помощью Xcode 3, но теперь у меня возникают проблемы со сборкой проектов, созданных с помощью Xcode 4.

Поместите библиотеку в проект Xcode 4, и она строится нормально, но как только я ее #include, я получаю сообщение об ошибке «Лексическая или препроцессорная проблема», а точнее: «строковый» файл не найден в строке 4 его основного файла заголовка. .

При ближайшем рассмотрении ошибка указывает, что 'string' file not found in ~/my project's directory/include/mainheader.h

Я пробовал решения, перечисленные здесь , но ни один не работал.

Поэтому он думает, что заголовочный файл находится в каталоге моего проекта, но это, очевидно, заголовок C/C++… Как я могу указать Xcode искать эти заголовки C/C++?


person Eric    schedule 16.01.2012    source источник
comment
Вы используете #include "string.h" или #include <string.h>? Есть разница.   -  person Richard J. Ross III    schedule 16.01.2012
comment
библиотека использует #include <string>   -  person Eric    schedule 16.01.2012
comment
Разве это не должно быть #include <string.h>? Я никогда не слышал о простом включении файла с именем string в С++   -  person Richard J. Ross III    schedule 16.01.2012
comment
Это законно, это шаблон класса (см. здесь), Xcode 3 не рассматривайте это как проблему, так что это как-то связано с Xcode 4.   -  person Eric    schedule 16.01.2012
comment
Попробуйте проверить этапы и настройки сборки и убедитесь, что файл компилируется как C++, а не C.   -  person Richard J. Ross III    schedule 16.01.2012
comment
Я проверил, что этот проблемный заголовочный файл имеет заголовок C++ в качестве типа файла.   -  person Eric    schedule 16.01.2012
comment
@Eric: а как насчет всех файлов, в которые он включен? Все они должны быть C++ или Objective-C++.   -  person JeremyP    schedule 16.01.2012
comment
Я делаю это #include в своем основном заголовочном файле, который является заголовком C. У меня все еще возникает эта проблема, когда я устанавливаю тип файла как заголовок C++.   -  person Eric    schedule 16.01.2012


Ответы (2)


Проблемный #include был на вершине моего ViewController.mm, который я уже превратил в Objective-C++, предоставив ему .mm в качестве расширения. Но ViewController.mm в конечном итоге импортируется AppDelegate.m, который по умолчанию является Objective-C, а я забыл сделать его Objective-C++, отсюда и проблема.

Таким образом, переименование AppDelegate.m в AppDelegate.mm решило проблему.

person Eric    schedule 17.01.2012

Я думаю, что #include - это шаблон класса С++, поэтому вам нужно использовать пространство имен std в вашем заголовочном файле, а также переименовать формат исходного файла .m в формат .mm.

это работает для меня :) попробуйте это...

person Saiful    schedule 16.01.2012
comment
Я не знаком с разработкой xCode и OSX/iOS, но это утверждение — #include — это шаблон класса C++ — определенно неверно. - person Andrejs Cainikovs; 16.01.2012
comment
Стандартная библиотека шаблонов C++ (STL) содержит класс строк, который используется на нескольких курсах информатики. Проверьте это :: bgsu.edu/departments/compsci/docs/string.html cplusplus.com/reference/string/string/string cplusplus.com/reference/string/string - person Saiful; 16.01.2012
comment
Спасибо, но ни одна из ваших ссылок не показывает объяснение. На этой странице он находится в самом конце: cplusplus.com/doc/tutorial/templates - person Andrejs Cainikovs; 16.01.2012
comment
Помещать using namespace ANYTHING; в заголовок не очень хорошая идея. В этом случае нет смысла иметь пространства имен. - person dreamlax; 16.01.2012
comment
@saif Ваше решение (переименование исходного файла), вероятно, правильное, но ответ немного сбивает с толку. std::string — это не шаблон, а класс. Я думаю, вы могли иметь в виду объявление класса. #include — это способ чтения других файлов независимо от их содержимого. - person Per Johansson; 17.01.2012