компиляция класса C ++ в Xcode: ошибка во время компиляции: stl vector - PullRequest
9 голосов
/ 11 февраля 2009

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

Спасибо

РЕДАКТИРОВАТЬ : добавлен 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

Ответы [ 8 ]

20 голосов
/ 11 февраля 2009

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

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

Файлы

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

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

17 голосов
/ 14 мая 2012

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

2 голосов
/ 11 февраля 2009

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

1 голос
/ 19 сентября 2018

Надеюсь, это поможет. После обновления xCode до версии 10 у меня возникли проблемы, включая библиотеки

и . Нашел простое решение, изменив тип библиотеки C ++ в настройках сборки проекта (настройки сборки цели):

Стандартная библиотека C ++: libc ++ (стандартная библиотека LLVM C ++ с поддержкой C ++ 11)

Скомпилировано без проблем.

0 голосов
/ 11 февраля 2009

В этой проблеме было две ошибки:

  • одно из моих включений содержало опечатку, которая вызвала ошибку компиляции
  • ошибка: вектор не найден .m файлы в .mm
0 голосов
/ 11 февраля 2009

Если вы говорите о 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 на моей машине.

Дальнейшая мысль: если вы перенесете исходный код и файлы сборки из сборки Linux на Mac, вы, вероятно, сможете просто скомпилировать их из командной строки точно так же, как в Linux ....

0 голосов
/ 11 февраля 2009

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

0 голосов
/ 11 февраля 2009

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

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

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

#include <stdlib.h>

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

#include <cstdlib>

: D

...