компиляция класса C++ в Xcode:ошибка во время компиляции:stl вектор

StackOverflow https://stackoverflow.com/questions/534861

  •  22-08-2019
  •  | 
  •  

Вопрос

У меня есть класс 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top