جدول الرموز المشوهة في Objective-C عند ربط مكتبة C ++ ثابتة
-
02-10-2019 - |
سؤال
لدي فصل يسمى الخيارات المكتوبة في 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 ++ لن يتفقوا على حجم أو تخطيط متغيرات الأعضاء.