جدول الرموز المشوهة في Objective-C عند ربط مكتبة C ++ ثابتة

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

سؤال

لدي فصل يسمى الخيارات المكتوبة في C ++ ، إليك معلومات الرأس:

class Options {
public:
string filename;
string chunkDir;
string outFilename;
string inFilename;
BOOL   compress;
BOOL   extract;
BOOL   print;
BOOL   reconstruct;
int    bits;

Options(string inFilename);
Options(int argc, char** argv);
void unsupported(string s);
void setOptionsFromArguments(int argc, char** argv);
void validateOptionCombination();
int getBits() {
    return bits
};

};

في قسم Objective-C ، أقوم بتهيئة خيارات مثل هذا:

Options *opts=new Options([fileName cStringUsingEncoding:NSUTF8StringEncoding]);

الآن ما يحدث هو أنه إذا قمت بتمرير المؤشر إلى طريقة C ++ أخرى ، فهي تعمل بشكل جيد ، ولكن إذا حاولت بالفعل الوصول إلى أي شيء في الجانب C الهدف باستخدام ، على سبيل المثال

opts-> بت أو opts-> getBits ()

إنه يعيد دائمًا قيمة عدد صحيح للطباعة

يبدو أن جدول الرموز يتم تشويهه بطريقة أو بأخرى بين جانب الهدف-C و C ++ ، لكن ليس لدي أي فكرة عما كان يمكن أن أفعله للقيام بذلك.

يعمل الكود حتى مع الهدف-C ++ إذا قمت بتجميع MAC ، وطالما أن C ++ هو الاتصال C ++ يبدو أنه يعمل ، لذا فهو لا يبدو أن الذاكرة تفسد ، يبدو الأمر وكأنه مشكلة في جدول الرموز.

إن أي نظرة يحظى بتقدير كبير.

هل كانت مفيدة؟

المحلول

في الهدف-C ، BOOL هو typedef ل signed char. ما هو التعريف الذي تستخدمه عند تجميع C ++ Pure؟ إذا كان الأمر مختلفًا ، فستحصل على كل أنواع الغرابة ، لأن رمز C ++ ورمز Objective-C ++ لن يتفقوا على حجم أو تخطيط متغيرات الأعضاء.

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