компиляция класса C++ в Xcode:ошибка во время компиляции:stl вектор
Вопрос
У меня есть класс C++, который отлично компилируется в Linux с помощью gcc и в вдовах в Visual Studio.
боид.ч:
#ifndef BOID_CLASS_HEADER_DEFINES_H
#define BOID_CLASS_HEADER_DEFINES_H
#include "defines.h"
class Boid {
public:
// Initialize the boid with random position, heading direction and color
Boid(float SceneRadius,float NormalVel);
.....
protected:
...
};
#endif
и в boid.cpp:
#include "Boid.h"
// Initialize the boid with random position, heading direction and color
Boid::Boid(float SceneRadius,float NormalVel)
{
....
}
Однако при компиляции этого кода в Xcode я получаю следующую ошибку:
Compiling Boid.h: "error: vector: No such file or directory"
Есть идеи?Я думал, вы сможете без проблем взять код C/C++ и скомпилировать его в Xcode?
Спасибо
РЕДАКТИРОВАТЬ:Добавлен defines.h (также добавлен #endif в образец, но это было в исходном коде)
РЕДАКТИРОВАТЬ 2:Я получаю другую ошибку после того, как закомментировал пару включений, которые были пусты:векторная ошибка выше.
#ifndef BOID_NAV_DEFINES_H
#define BOID_NAV_DEFINES_H
#include <stdlib.h>
#include <vector>
#include "Vector3d.h"
#include "Point3d.h"
#include "win_layer.h"
#endif
Решение
Вы включаете заголовок C ++ в файл .m?
Файлы .m рассматриваются как файлы .c с расширениями Objective-C.
.MM-файлы рассматриваются как файлы .cpp с расширениями Objective-C, тогда это называется Objective-C ++
Просто переименуйте любой файл .m в .mm, щелкните правой кнопкой мыши или CTRL-клик и выберите «Переименовать» в файле в XCODE.
Другие советы
Без изменения .m на .mm или что-то в этом роде, если вы нажмете свой проект, нажмите Tagets-> Настройки сборки перейдите вниз до "LLVM GCC 4.2 - языки" (Новый Xcode говорит "Apple LLVM Compiler 4.2") ты увидишь Составьте источники как изменить это значение на Objective-C ++;
Убедитесь, что вы собираете это как C ++. Щелкните правой кнопкой мыши файл в XCODE и выберите Получить информацию и убедитесь, что Тип файла установлен на sourcecode.cpp.cpp Для файлов реализации.
Я надеюсь, это поможет. После обновления Xcode до версии 10 у меня были проблемы, включая <part> и <vector> библиотеки. Нашел простое решение, изменяя тип библиотеки C ++ в настройках сборки проекта (настройки сборки Target):
Стандартная библиотека C ++: LIBC ++ (Стандартная библиотека LLVM C ++ с поддержкой C ++ 11)
Скомпилируется без каких -либо проблем.
Определенно, что -то в Defines.h влияет на определение класса.
В этой проблеме было две ошибки:
- в одном из моих включений была опечатка, которая вызвала ошибку компиляции
- ошибка «вектор не найден» была исправлена файлами .m до .mm
Предполагая, что вы говорите об OS X Xode, который использует GCC для выполнения фактического компиляции. Таким образом, не должно быть никакой разницы между этим и Linux, кроме, возможно, разных версий GCC.
Первое, что выходит на меня здесь, это то, что вы напечатали «boid.h» как имя файла, но вы включаете «boid.h». Предполагая, что это не опечатка, я ожидаю, что это вызвало бы проблемы с Linux и OS X ....
Отредактировано, чтобы ответить на новый вопрос: хммм ... вектор, безусловно, является частью XCode: /Developer/SDKs/MacOSX10.5.sdk/usr/include/c++/4.0.0/vector
на моей машине.
Дальнейшие подумайте: если вы переносите источник и Makefiles из строительства Linux на Mac, вы, вероятно, можете просто собрать его из командной строки точно так же, как и на Linux ....
Не уверен, что вы забыли вставить, но у вас есть непосмертный #ifndef
Что внутри определяет ?
Редактировать: Вы, кажется, нашли решение. Еще одно замечание:
#include <stdlib.h>
Для C ++, пожалуйста:
#include <cstdlib>
: D.