Таблица искаженных символов в Objective-C при связывании статической библиотеки C ++ - PullRequest
0 голосов
/ 15 сентября 2010

У меня есть класс с именем options, написанный на 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 следующим образом:

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

Теперь получается, что если я передам указатель другому методу C ++, он будет работать нормально, но если я на самом деле попытаюсь получить доступ к чему-либо на стороне цели c, например, используя

-> bits или opts-> getBits ()

Всегда возвращает целочисленное значение для печати

Похоже, что таблица символов каким-то образом искажается между объектами -c и C ++, ноЯ понятия не имею, что я мог сделать, чтобы сделать это.

Код работает даже с Objective-C ++, если я компилирую для Mac, и до тех пор, пока C ++ вызывает C ++, он, кажется, работает, поэтому не похоже на повреждение памяти, он просто выглядит как таблица символоввыпуск.

Любое понимание будет высоко ценится.

1 Ответ

1 голос
/ 16 сентября 2010

В Objective-C BOOL является typedef для signed char.Какое определение вы используете при компиляции чистого C ++?Если это не так, вы получите все виды странностей, потому что код C ++ и код Objective-C ++ не согласятся с размером или расположением переменных-членов.

...