تجميع فئة C ++ في Xcode: خطأ أثناء التجميع: ناقل STL

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

  •  22-08-2019
  •  | 
  •  

سؤال

لدي فئة 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 بدون مشاكل؟

شكرًا

تعديل: تمت إضافة 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 أو Ctrl ، وحدد إعادة تسمية على الملف في Xcode.

نصائح أخرى

دون تغيير أي .m إلى .mm أو أي شيء من هذا القبيل ، إذا قمت بالنقر فوق مشروعك ، انقر فوق tagets-> إنشاء إعدادات تنطلق إلى الطريق "LLVM GCC 4.2 - اللغات" (يقول Xcode الجديد "برنامج التحويل البرمجي Apple LLVM 4.2") سوف ترى تجميع المصادر كما تغيير هذه القيمة إلى Objective-C ++;

تأكد من تجميعه كـ C ++. انقر بزر الماوس الأيمن على الملف في Xcode وحدد يحصل على معلومات وتأكد من ذلك نوع الملف تم تعيينه على sourcecode.cpp.cpp لملفات التنفيذ.

آمل أن يساعد هذا. بعد تحديث Xcode إلى الإصدار 10 ، واجهت مشكلات بما في ذلك Libraries <Map> و <vector>. وجدت حلًا سهلاً عن طريق تغيير نوع مكتبة C ++ في إعدادات بناء المشروع (إعدادات بناء الهدف):

مكتبة C ++ القياسية: LIBC ++ (LLVM C ++ مكتبة قياسية مع دعم C ++ 11)

تم تجميعها دون أي مشكلة.

بالتأكيد ، شيء ما في التعريف. H يؤثر على تعريف الفصل.

كان لهذه القضية خطأين:

  • كان أحد ما يتشمله هو خطأ مطبعي تسبب في خطأ في الترجمة
  • تم إصلاح الخطأ الذي لم يتم العثور على المتجه بواسطة ملفات .m إلى .mm

على افتراض أنك تتحدث عن 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 على جهازي.

مزيد من التفكير: إذا قمت بنقل المصدر وتصنيع من Linux إلى Mac ، فيمكنك على الأرجح تجميعه من سطر الأوامر تمامًا كما تفعل على Linux ....

لست متأكدًا مما إذا كنت قد نسيت لصقها ، لكن لديك #IFNDEF غير المنتهي

ماذا يوجد في الداخل Defines.H ?

يحرر: يبدو أنك وجدت الحل. ملاحظة أخرى:

#include <stdlib.h>

لـ C ++ ، من فضلك:

#include <cstdlib>

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top