2009-02-10 4 views
9

У меня есть класс C++, который отлично компилируется на linux с gcc и на вдовах в visual studio.компиляция класса C++ в Xcode: ошибка во время компиляции: stl vector

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/C++ и скомпилировать его в Xcode без проблем?

Благодаря

EDIT: Добавлено defines.h (также добавил #endif к образцу, но это было в исходном коде)

EDIT 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 
+0

win_layer закомментирован, я упустил некоторые функции, но теперь он пуст, я хочу исключить его из проекта – cbrulak

+0

Теперь я получаю сообщение об ошибке с вектором: «error: vector: Нет такого файла или каталога» – cbrulak

ответ

20

Вы включаете заголовок C++ в файле .m?

.m файлы обрабатываются как .c-файлы с расширениями Objective-C.

.mm файлы рассматриваются как .cpp файлы с расширениями Objective-C, то это называется Objective-C++

Просто переименовать любой файл .m в .mm, щелкните правой кнопкой мыши или Ctrl кнопкой мыши и выберите Переименовать файл в Xcode.

+0

Я не мог видеть параметр переименования в Xcode, поэтому я скопировал файл в Finder, переименовал его в .mm, удалил .m-файл из проект в Xcode и, наконец, добавил файл .mm в проект в Xcode – dumbledad

+0

Подумайте, что в настоящее время можно выбрать файл в Xcode и выбрать его снова через секунду, а затем его имя будет доступно для редактирования. – epatel

0

Не уверен, что если вы забыли вставить, но у вас есть незавершенная #ifndef

Что внутри defines.h?

Редактировать: Вы, кажется, нашли решение. Еще одно замечание:

#include <stdlib.h> 

Для C++, пожалуйста:

#include <cstdlib> 

: D

+0

добавил define.h к вопросу, также, #endif находится в исходном коде – cbrulak

0

Определенно, что-то в defines.h влияет на определение класса.

2

Убедитесь, что вы скомпилируете его как C++. Щелкните правой кнопкой мыши файл в XCode и выберите Получить информацию и убедитесь, что Тип файла установлен в sourcecode.cpp.cpp для файлов реализации.

0

Ваш пример вывода содержит 68 ошибок, но вы только отправили пару. Знают ли другие, что они неактуальны?

0

Предполагая, что вы говорите об OS X XCode, который использует 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 ....

0

Этот вопрос был две ошибки:

  • один из моих включает была опечатка, который вызвал ошибку компиляции
  • вектор не найден ошибка была исправлена ​​с помощью .m файлов .mm
+0

hi cbrulak..pls дайте мне знать, как вы решили проблему. – CoDe

+0

Привет, я принял правильный ответ (после вашего комментария). извините за задержку – cbrulak

15

Без изменения каких-либо .m до .mm или чего-либо подобного, если вы нажмете на свой проект, нажмите tagets-> build settings зайдите полностью до «LLVM GCC 4.2 - Языки» (новый xcode говорит «Apple LLVM компилятор 4.2 ") вы увидите Скомпилировать источники Как изменить это значение на Objective-C++;

+0

Спасибо, что сделал трюк! – Anila

+2

Жаль, что я мог бы возвыситься не один раз! :) Благодаря. – BruceHill