2010-09-15 3 views
0

У меня есть класс с именем опции, написанные на C++, вот информация Заголовок:искореженных таблица символов в Objective-C при связывании статического 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++ он работает нормально, но если я на самом деле пытаются получить доступ что-нибудь в Objective C стороны, используя, например

opts-> биты или opts-> getBits()

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

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

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

Любое понимание было бы высоко оценено.

ответ

1

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

+0

Это было, я использовал unsigned short. Я просто изменил имя typedef от BOOL до CBOOL на C++, чтобы избежать потенциальной будущей путаницы. Благодарю. – user439407