Компиляция класса С++ в Xcode: ошибка во время компиляции: stl vector
У меня есть класс С++, который отлично компилируется на linux с gcc и на вдовах в visual studio.
boid.h:
#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/С++ и скомпилировать его в Xcode без проблем?
Спасибо
EDIT: добавлено define.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
Ответы
Ответ 1
Вы включаете заголовок С++ в файл .m?
Файлы .m обрабатываются как .c файлы с расширениями Objective-C.
Файлы .mm обрабатываются как .cpp файлы с расширениями Objective-C, затем он называется Objective-C ++
Просто переименуйте любой .m файл в .mm, щелкните правой кнопкой мыши или ctrl-click и выберите переименование файла в Xcode.
Ответ 2
Без изменения какого-либо .m до .mm или чего-либо подобного, если вы нажмете на свой проект, нажмите tagets- > build settings
перейти к "LLVM GCC 4.2 - Языки" (новый xcode говорит "Apple LLVM компилятор 4.2" ), вы увидите Компилировать источники как > измените это значение на Objective-C ++;
Ответ 3
Убедитесь, что вы скомпилируете его как С++. Щелкните правой кнопкой мыши файл в XCode и выберите Получить информацию и убедитесь, что для файла реализации Тип файла установлено значение sourcecode.cpp.cpp.
Ответ 4
Не уверен, что вы забыли вставить, но у вас есть unterminated #ifndef
Что внутри define.h?
Изменить: Вы, кажется, нашли решение. Еще одно замечание:
#include <stdlib.h>
Для С++, пожалуйста:
#include <cstdlib>
: D
Ответ 5
Определенно, что-то в define.h влияет на определение класса.
Ответ 6
В вашем примере вывод содержит 68 ошибок, но вы только отправили пару. Известны ли другие, не имеющие значения?
Ответ 7
Предполагая, что вы говорите об OS X XCode, который использует gcc для фактического компиляции. Таким образом, не должно быть никакой разницы между этим и Linux, кроме, возможно, разных версий gcc.
Первое, что выскакивает у меня здесь, это то, что вы набрали "boid.h" как имя файла, но вы включили "Boid.h". Предполагая, что это не опечатка, я ожидаю, что это вызовет проблемы как с Linux, так и с OS X....
Отредактировано для ответа на новый вопрос: Hmmm... вектор определенно является частью Xcode: /Developer/SDKs/MacOSX10.5.sdk/usr/include/c++/4.0.0/vector
на моей машине.
Дальше подумали: если вы портируете исходный код и make файлы из сборки Linux на Mac, вы, вероятно, можете просто скомпилировать его из командной строки точно так же, как в Linux...
Ответ 8
У этой проблемы было две ошибки:
- В одном из моих включений была опечатка, которая вызвала ошибку компиляции
- ошибка найденного вектора была исправлена файлами .m для .mm