Компиляция класса С++ в Xcode: ошибка во время компиляции: stl vector - программирование

Компиляция класса С++ в 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
4b9b3361

Ответ 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